Submission #45638

# Submission time Handle Problem Language Result Execution time Memory
45638 2018-04-15T16:55:52 Z gnoor Boat (APIO16_boat) C++17
27 / 100
2000 ms 9696 KB
#include <cstdio>
#include <algorithm>
#include <map>

using namespace std;

map<int,int> mp;
int a[600];
int b[600];
int mod=1000000007;
int dec[1010];

long long dp[600][1010];
long long p[32][600];
long long q[1010][600][32];

int main () {
	int n;
	scanf("%d",&n);
	for (int i=0;i<n;i++) {
		scanf("%d%d",&a[i],&b[i]);
		mp[a[i]-1];
		mp[b[i]];
	}
	int i=1;
	for (auto &ii:mp) {
		dec[i]=ii.first;
		ii.second=i++;
	}
	for (int i=0;i<n;i++) {
		a[i]=mp[a[i]-1];
		b[i]=mp[b[i]];
	}
	int nn=mp.size();

	for (int j=1;j<=n;j++) p[0][j]=j;
	//printf("0: ");
	//for (int j=1;j<=n;j++) printf("%lld ",p[0][j]-p[0][j-1]);
	//printf("\n");
	for (int i=1;i<32;i++) {
		//printf("%d: ",i);
		for (int j=1;j<=n;j++) {
			p[i][j]=2*(p[i-1][j]-p[i-1][j-1]);
			p[i][j]%=mod;
			p[i][j]+=p[i][j-1];
			p[i][j]%=mod;
			for (int k=1;k<j;k++) {
				p[i][j]+=((p[i-1][k]-p[i-1][k-1])%mod)*((p[i-1][j-k]-p[i-1][j-k-1])%mod);
				p[i][j]%=mod;
			}
			//printf("%lld ",p[i][j]-p[i][j-1]);
		}
		//printf("\n");
	}
	int val;	
	for (int k=1;k<=nn;k++) {
		val=dec[k]-dec[k-1];	
		for (int j=1;j<=n;j++) {
			if (val%2) {
				q[k][j][0]=j;
			}
			for (int i=1;i<32;i++) {
				if (val&(1<<i)) {
					q[k][j][i]=q[k][j-1][i]+p[i][j]-p[i][j-1]+q[k][j][i-1]-q[k][j-1][i-1];
					q[k][j][i]%=mod;
					for (int l=1;l<j;l++) {
						q[k][j][i]+=((q[k][l][i-1]-q[k][l-1][i-1])%mod)*((p[i][j-l]-p[i][j-l-1])%mod);
						q[k][j][i]%=mod;
					}
				} else {
					q[k][j][i]=q[k][j][i-1];
				}
			}
			//printf("%lld ",q[k][j][31]);
		}
		//printf("\n");
	}	
	

	for (int i=0;i<n;i++) {
		//printf("** %d %d\n",a[i],b[i]);
		for (int k=a[i]+1;k<=b[i];k++) {
			int cnt=1;
			for (int j=i-1;j>=0;j--) {
				//printf("** %d %d %d %lld\n",i,j,k,dp[j][k-1]);
				dp[i][k]+=dp[j][k-1]*(q[k][cnt][31]-q[k][cnt-1][31]);
				//dp[i][k]+=dp[j][k-1]*(dec[k]-dec[k-1]);
				dp[i][k]%=mod;
				if (k>a[j]&&k<=b[j]) cnt++;
			}
			dp[i][k]+=q[k][cnt][31]-q[k][cnt-1][31];
			dp[i][k]+=dp[i][k-1];
			dp[i][k]%=mod;			
		}
		//for (int k=a[i]+1;k<=b[i];k++) {
			//dp[i][k]+=(dec[k]-dec[k-1]);
			//dp[i][k]+=dp[i][k-1];
			//dp[i][k]%=mod;
		//}
		for (int k=b[i]+1;k<=nn;k++) {
			dp[i][k]+=dp[i][k-1];
			dp[i][k]%=mod;
		}
		//for (int k=1;k<=nn;k++) {
			//printf("%lld ",dp[i][k]);
		//}
		//printf("\n");
	}
	long long ans=0;
	for (int i=0;i<n;i++) {
		ans+=dp[i][nn];
		ans%=mod;
	}
	ans+=mod;
	ans%=mod;
	printf("%lld\n",ans);
	return 0;
}

Compilation message

boat.cpp: In function 'int main()':
boat.cpp:19:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
  ~~~~~^~~~~~~~~
boat.cpp:21: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 Execution timed out 2029 ms 9696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2029 ms 9696 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 465 ms 9696 KB Output is correct
2 Correct 454 ms 9696 KB Output is correct
3 Correct 496 ms 9696 KB Output is correct
4 Correct 532 ms 9696 KB Output is correct
5 Correct 489 ms 9696 KB Output is correct
6 Correct 471 ms 9696 KB Output is correct
7 Correct 480 ms 9696 KB Output is correct
8 Correct 502 ms 9696 KB Output is correct
9 Correct 461 ms 9696 KB Output is correct
10 Correct 458 ms 9696 KB Output is correct
11 Correct 445 ms 9696 KB Output is correct
12 Correct 478 ms 9696 KB Output is correct
13 Correct 450 ms 9696 KB Output is correct
14 Correct 499 ms 9696 KB Output is correct
15 Correct 500 ms 9696 KB Output is correct
16 Correct 234 ms 9696 KB Output is correct
17 Correct 320 ms 9696 KB Output is correct
18 Correct 241 ms 9696 KB Output is correct
19 Correct 240 ms 9696 KB Output is correct
20 Correct 235 ms 9696 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 2029 ms 9696 KB Time limit exceeded
2 Halted 0 ms 0 KB -