Submission #404427

# Submission time Handle Problem Language Result Execution time Memory
404427 2021-05-14T12:00:17 Z CursedCode Boat (APIO16_boat) C++14
36 / 100
647 ms 23356 KB
#include <bits/stdc++.h>
#define ll long long
const ll MOD=1000000007;
using namespace std;
ll n,k;
ll l[1005],r[1005],dp[1005][1005],val[1005],cnt[1005][1005],c[1005][1005],sum[1005][1005],len[1005],C[1005][1005];
unordered_map<ll,ll>um;
set<ll>s;
ll power(ll x,ll y){
	ll res=1;
	while(y){
		if(y&1){
			res=res*x;
			if(res>=MOD) res%=MOD;
		}
		y>>=1;
		x=x*x;
		if(x>=MOD) x%=MOD;
	}
	return res;
}
int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for(ll i=1;i<=n;i++){
		cin >> l[i] >> r[i];
		s.insert(l[i]);
		s.insert(r[i]+1);
	}
	for(auto i=s.begin();i!=s.end();++i){
		um[*i]=++k;
		val[k]=*i;
		if(k>1) len[k-1]=val[k]-val[k-1];
	}
	for(ll i=0;i<=n;i++){
		C[i][0]=1;
		for(ll j=1;j<=i;j++){
			C[i][j]=C[i][j-1]*(i+1-j);
			if(C[i][j]>=MOD) C[i][j]%=MOD;
			C[i][j]*=power(j,MOD-2);
			if(C[i][j]>=MOD) C[i][j]%=MOD;
		}
	}
	for(ll i=1;i<k;i++){
		c[i][0]=1;
		for(ll j=1;j<=min(len[i],n);j++){
			c[i][j]=c[i][j-1]*(len[i]+1-j);
			if(c[i][j]>=MOD) c[i][j]%=MOD;
			c[i][j]*=power(j,MOD-2);
			if(c[i][j]>=MOD) c[i][j]%=MOD;
			// cout << i << ' ' << j << ' ' << c[i][j] << '\n';
		}
	}
	for(ll i=1;i<k;i++){
		for(ll j=1;j<=min(len[i],n);j++){
			ll res=0;
			for(ll t=1;t<=j;t++){
				res+=(c[i][t]*C[j-1][t-1]);
				if(res>=MOD) res%=MOD;
			}
			sum[i][j]=res;
		}
	}
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<k;j++){
			if(l[i]<=val[j] && val[j]<=r[i]){
				cnt[i][j]=cnt[i-1][j]+1;
			}
			else cnt[i][j]=cnt[i-1][j];
			// cout << i << ' ' << j << ' ' << cnt[i][j] << '\n';
		}
	}
	for(ll i=0;i<=n;i++){dp[i][0]=1;}
	for(ll i=0;i<=n;i++){
		for(ll j=1;j<k;j++){
			dp[i][j]+=dp[i][j-1];
			if(dp[i][j]>=MOD) dp[i][j]%=MOD;
			for(ll t=0;t<i;t++){
				if(l[t+1]<=val[j] && val[j]<=r[t+1]){
					ll p=cnt[i][j]-cnt[t][j];
					dp[i][j]+=(dp[t][j-1]*sum[j][min(p,len[j])]);
					if(dp[i][j]>=MOD) dp[i][j]%=MOD;
				}
				// if(i==1 && j==2) cout << cnt[i][j] << '\n';
			}
			// cout << i << ' ' << j << ' ' << dp[i][j] << '\n';
		}
	}
	cout << (dp[n][k-1]-1+MOD)%MOD;
}
# Verdict Execution time Memory Grader output
1 Correct 624 ms 23172 KB Output is correct
2 Correct 647 ms 23108 KB Output is correct
3 Correct 631 ms 23160 KB Output is correct
4 Correct 627 ms 23088 KB Output is correct
5 Correct 635 ms 23356 KB Output is correct
6 Correct 501 ms 23080 KB Output is correct
7 Correct 506 ms 23100 KB Output is correct
8 Correct 539 ms 23192 KB Output is correct
9 Correct 534 ms 23108 KB Output is correct
10 Correct 506 ms 23136 KB Output is correct
11 Correct 506 ms 23120 KB Output is correct
12 Correct 509 ms 23092 KB Output is correct
13 Correct 534 ms 23260 KB Output is correct
14 Correct 501 ms 23236 KB Output is correct
15 Correct 513 ms 23084 KB Output is correct
16 Correct 136 ms 10820 KB Output is correct
17 Correct 144 ms 11288 KB Output is correct
18 Correct 144 ms 10876 KB Output is correct
19 Correct 143 ms 11012 KB Output is correct
20 Correct 146 ms 10968 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 624 ms 23172 KB Output is correct
2 Correct 647 ms 23108 KB Output is correct
3 Correct 631 ms 23160 KB Output is correct
4 Correct 627 ms 23088 KB Output is correct
5 Correct 635 ms 23356 KB Output is correct
6 Correct 501 ms 23080 KB Output is correct
7 Correct 506 ms 23100 KB Output is correct
8 Correct 539 ms 23192 KB Output is correct
9 Correct 534 ms 23108 KB Output is correct
10 Correct 506 ms 23136 KB Output is correct
11 Correct 506 ms 23120 KB Output is correct
12 Correct 509 ms 23092 KB Output is correct
13 Correct 534 ms 23260 KB Output is correct
14 Correct 501 ms 23236 KB Output is correct
15 Correct 513 ms 23084 KB Output is correct
16 Correct 136 ms 10820 KB Output is correct
17 Correct 144 ms 11288 KB Output is correct
18 Correct 144 ms 10876 KB Output is correct
19 Correct 143 ms 11012 KB Output is correct
20 Correct 146 ms 10968 KB Output is correct
21 Incorrect 632 ms 18652 KB Output isn't correct
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 16 ms 3788 KB Output is correct
2 Correct 14 ms 3860 KB Output is correct
3 Correct 15 ms 3788 KB Output is correct
4 Correct 16 ms 3780 KB Output is correct
5 Correct 14 ms 3804 KB Output is correct
6 Correct 15 ms 3788 KB Output is correct
7 Correct 15 ms 3884 KB Output is correct
8 Correct 15 ms 3892 KB Output is correct
9 Correct 16 ms 3780 KB Output is correct
10 Correct 15 ms 3788 KB Output is correct
11 Correct 14 ms 3860 KB Output is correct
12 Correct 14 ms 3852 KB Output is correct
13 Correct 15 ms 3776 KB Output is correct
14 Correct 14 ms 3788 KB Output is correct
15 Correct 15 ms 3892 KB Output is correct
16 Correct 9 ms 2892 KB Output is correct
17 Correct 9 ms 2752 KB Output is correct
18 Correct 9 ms 2892 KB Output is correct
19 Correct 9 ms 2892 KB Output is correct
20 Correct 9 ms 2792 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 624 ms 23172 KB Output is correct
2 Correct 647 ms 23108 KB Output is correct
3 Correct 631 ms 23160 KB Output is correct
4 Correct 627 ms 23088 KB Output is correct
5 Correct 635 ms 23356 KB Output is correct
6 Correct 501 ms 23080 KB Output is correct
7 Correct 506 ms 23100 KB Output is correct
8 Correct 539 ms 23192 KB Output is correct
9 Correct 534 ms 23108 KB Output is correct
10 Correct 506 ms 23136 KB Output is correct
11 Correct 506 ms 23120 KB Output is correct
12 Correct 509 ms 23092 KB Output is correct
13 Correct 534 ms 23260 KB Output is correct
14 Correct 501 ms 23236 KB Output is correct
15 Correct 513 ms 23084 KB Output is correct
16 Correct 136 ms 10820 KB Output is correct
17 Correct 144 ms 11288 KB Output is correct
18 Correct 144 ms 10876 KB Output is correct
19 Correct 143 ms 11012 KB Output is correct
20 Correct 146 ms 10968 KB Output is correct
21 Incorrect 632 ms 18652 KB Output isn't correct
22 Halted 0 ms 0 KB -