Submission #184082

# Submission time Handle Problem Language Result Execution time Memory
184082 2020-01-10T12:39:34 Z dndhk Boat (APIO16_boat) C++14
0 / 100
1514 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-2] * (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 1453 ms 6392 KB Output is correct
2 Correct 1453 ms 6392 KB Output is correct
3 Correct 1494 ms 6392 KB Output is correct
4 Correct 1514 ms 6320 KB Output is correct
5 Correct 1461 ms 6388 KB Output is correct
6 Correct 1451 ms 6408 KB Output is correct
7 Correct 1460 ms 6520 KB Output is correct
8 Correct 1447 ms 6268 KB Output is correct
9 Correct 1480 ms 6392 KB Output is correct
10 Correct 1446 ms 6392 KB Output is correct
11 Correct 1512 ms 6388 KB Output is correct
12 Correct 1500 ms 6392 KB Output is correct
13 Correct 1447 ms 6360 KB Output is correct
14 Correct 1447 ms 6392 KB Output is correct
15 Correct 1459 ms 6508 KB Output is correct
16 Incorrect 306 ms 5112 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1453 ms 6392 KB Output is correct
2 Correct 1453 ms 6392 KB Output is correct
3 Correct 1494 ms 6392 KB Output is correct
4 Correct 1514 ms 6320 KB Output is correct
5 Correct 1461 ms 6388 KB Output is correct
6 Correct 1451 ms 6408 KB Output is correct
7 Correct 1460 ms 6520 KB Output is correct
8 Correct 1447 ms 6268 KB Output is correct
9 Correct 1480 ms 6392 KB Output is correct
10 Correct 1446 ms 6392 KB Output is correct
11 Correct 1512 ms 6388 KB Output is correct
12 Correct 1500 ms 6392 KB Output is correct
13 Correct 1447 ms 6360 KB Output is correct
14 Correct 1447 ms 6392 KB Output is correct
15 Correct 1459 ms 6508 KB Output is correct
16 Incorrect 306 ms 5112 KB Output isn't correct
17 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 233 ms 1568 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1453 ms 6392 KB Output is correct
2 Correct 1453 ms 6392 KB Output is correct
3 Correct 1494 ms 6392 KB Output is correct
4 Correct 1514 ms 6320 KB Output is correct
5 Correct 1461 ms 6388 KB Output is correct
6 Correct 1451 ms 6408 KB Output is correct
7 Correct 1460 ms 6520 KB Output is correct
8 Correct 1447 ms 6268 KB Output is correct
9 Correct 1480 ms 6392 KB Output is correct
10 Correct 1446 ms 6392 KB Output is correct
11 Correct 1512 ms 6388 KB Output is correct
12 Correct 1500 ms 6392 KB Output is correct
13 Correct 1447 ms 6360 KB Output is correct
14 Correct 1447 ms 6392 KB Output is correct
15 Correct 1459 ms 6508 KB Output is correct
16 Incorrect 306 ms 5112 KB Output isn't correct
17 Halted 0 ms 0 KB -