Submission #184083

# Submission time Handle Problem Language Result Execution time Memory
184083 2020-01-10T12:44:08 Z dndhk Boat (APIO16_boat) C++14
9 / 100
2000 ms 6520 KB
#include <bits/stdc++.h>

#define all(v) (v).begin(), (v).end()
#define sortv(v) sort(all(v))
#define uniqv(v) (v).erase(unique(all(v)), (v).end())
#define pb push_back
#define FI first
#define SE second
#define lb lower_bound
#define ub upper_bound
#define test 1
#define TEST if(test)

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

const ll MOD = 1000000007;
const int INF = 2e9;
const ll INFLL = 1e18;
const int MAX_N = 500;

int N, M;
int a[MAX_N+1], b[MAX_N+1];
vector<int> v1;
vector<ll> v;
map<int, int> mp;

void input(){
	scanf("%d", &N);
	for(int i=1 ;i<=N; i++){
		scanf("%d%d", &a[i], &b[i]);
		b[i]++;
		v1.pb(a[i]); v1.pb(b[i]);
	}
	sort(v1.begin(), v1.end());
	v1.erase(unique(v1.begin(), v1.end()), v1.end());
	sort(v1.begin(), v1.end());
	v.pb(1LL);
	for(int i=0; i<v1.size()-1; i++){
		mp[v1[i]] = v.size();
		v.pb(v1[i+1]-v1[i]);
	}mp[v1.back()] = v.size();
	for(int i=1; i<=N; i++){
		a[i] = mp[a[i]]; b[i] = mp[b[i]]-1;
	}
	M = v.size()-1;
}

ll multi(ll x, ll y){
	if(y==0){
		return 1LL;
	}if(y==1){
		return x%MOD;
	}
	ll m = multi(x, y/2);
	if(y%2){
		return ((m*m%MOD)*x)%MOD;
	}
	return (m*m)%MOD;
}

ll inv(ll x){
	return multi(x, MOD-2);
}

ll dp[MAX_N+1][MAX_N*2+1];
ll dp2[MAX_N+1][MAX_N+1];

void solve(){
	for(int i=0; i<=M; i++)	dp[0][i] = 1LL;
	for(int i=1; i<=N; i++)	dp[i][0] = 1LL;	
	for(int k=1; k<=M; k++){
		for(int i=1; i<=N; i++){
			dp2[i][1] = dp2[i-1][1];
			if(a[i]<=k && k<=b[i]) dp2[i][1] = (dp2[i][1] + dp[i-1][k-1]) % MOD;
			dp[i][k]=dp2[i][1];
			for(int j=2; j<=N; j++){
				dp2[i][j] = 0LL;
				if(a[i]<=k && k<=b[i]) dp2[i][j] = (dp2[i-1][j-1] * (v[k]-(ll)(j-1))%MOD) * inv((ll)j) % MOD;
				dp2[i][j] = (dp2[i][j] + dp2[i-1][j]) % MOD;
				dp[i][k] = (dp[i][k] + dp2[i][j]) % MOD;
			}
			dp[i][k] = (dp[i][k] + dp[i][k-1]) % MOD;
		}
	}
	/*for(int i=1; i<=N; i++){
		for(int j=0; j<=M; j++){
			cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
		}
	}*/
}

int main(){
	input();
	solve();
	cout<<(dp[N][M]+MOD-1) % MOD;
	return 0;
}

Compilation message

boat.cpp: In function 'void input()':
boat.cpp:43:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v1.size()-1; i++){
               ~^~~~~~~~~~~~
boat.cpp:33:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N);
  ~~~~~^~~~~~~~~~
boat.cpp:35:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &a[i], &b[i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1447 ms 6392 KB Output is correct
2 Correct 1455 ms 6392 KB Output is correct
3 Correct 1448 ms 6308 KB Output is correct
4 Correct 1458 ms 6340 KB Output is correct
5 Correct 1464 ms 6436 KB Output is correct
6 Correct 1701 ms 6428 KB Output is correct
7 Correct 1444 ms 6380 KB Output is correct
8 Correct 1468 ms 6320 KB Output is correct
9 Correct 1506 ms 6428 KB Output is correct
10 Correct 1447 ms 6520 KB Output is correct
11 Correct 1449 ms 6496 KB Output is correct
12 Correct 1457 ms 6392 KB Output is correct
13 Correct 1496 ms 6392 KB Output is correct
14 Correct 1463 ms 6388 KB Output is correct
15 Correct 1454 ms 6236 KB Output is correct
16 Correct 326 ms 5020 KB Output is correct
17 Correct 363 ms 5032 KB Output is correct
18 Correct 358 ms 5236 KB Output is correct
19 Correct 366 ms 5180 KB Output is correct
20 Correct 336 ms 5096 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1447 ms 6392 KB Output is correct
2 Correct 1455 ms 6392 KB Output is correct
3 Correct 1448 ms 6308 KB Output is correct
4 Correct 1458 ms 6340 KB Output is correct
5 Correct 1464 ms 6436 KB Output is correct
6 Correct 1701 ms 6428 KB Output is correct
7 Correct 1444 ms 6380 KB Output is correct
8 Correct 1468 ms 6320 KB Output is correct
9 Correct 1506 ms 6428 KB Output is correct
10 Correct 1447 ms 6520 KB Output is correct
11 Correct 1449 ms 6496 KB Output is correct
12 Correct 1457 ms 6392 KB Output is correct
13 Correct 1496 ms 6392 KB Output is correct
14 Correct 1463 ms 6388 KB Output is correct
15 Correct 1454 ms 6236 KB Output is correct
16 Correct 326 ms 5020 KB Output is correct
17 Correct 363 ms 5032 KB Output is correct
18 Correct 358 ms 5236 KB Output is correct
19 Correct 366 ms 5180 KB Output is correct
20 Correct 336 ms 5096 KB Output is correct
21 Execution timed out 2058 ms 5312 KB Time limit exceeded
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 246 ms 1528 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1447 ms 6392 KB Output is correct
2 Correct 1455 ms 6392 KB Output is correct
3 Correct 1448 ms 6308 KB Output is correct
4 Correct 1458 ms 6340 KB Output is correct
5 Correct 1464 ms 6436 KB Output is correct
6 Correct 1701 ms 6428 KB Output is correct
7 Correct 1444 ms 6380 KB Output is correct
8 Correct 1468 ms 6320 KB Output is correct
9 Correct 1506 ms 6428 KB Output is correct
10 Correct 1447 ms 6520 KB Output is correct
11 Correct 1449 ms 6496 KB Output is correct
12 Correct 1457 ms 6392 KB Output is correct
13 Correct 1496 ms 6392 KB Output is correct
14 Correct 1463 ms 6388 KB Output is correct
15 Correct 1454 ms 6236 KB Output is correct
16 Correct 326 ms 5020 KB Output is correct
17 Correct 363 ms 5032 KB Output is correct
18 Correct 358 ms 5236 KB Output is correct
19 Correct 366 ms 5180 KB Output is correct
20 Correct 336 ms 5096 KB Output is correct
21 Execution timed out 2058 ms 5312 KB Time limit exceeded
22 Halted 0 ms 0 KB -