Submission #231738

# Submission time Handle Problem Language Result Execution time Memory
231738 2020-05-14T14:53:28 Z kshitij_sodani Boat (APIO16_boat) C++17
58 / 100
2000 ms 24988 KB
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define a first
#define b second
#define pb push_back
llo n,aa,bb;
map<llo,llo> dd;
llo si[2001];
llo mod=1000000007;
vector<llo> cc;
vector<pair<llo,llo>> it;
llo fac[501];
llo fac2[501];
llo pre[2001][501];
llo pre2[2001][501];
llo com[501][501];
llo dp[501][2001];
llo ind2=0;

llo mod2(llo ee,llo ff){
	if(ff==0){
		return 1;
	}
	llo ans=mod2(ee,ff/2);
	ans*=ans;
	ans%=mod;
	if(ff%2==1){
		ans*=ee;
		ans%=mod;
	}
	return ans;
}
void comp(){
	fac[0]=1;
	for(llo i=1;i<501;i++){
		fac[i]=fac[i-1]*i;
		fac[i]%=mod;
	}
	for(llo i=0;i<501;i++){
		fac2[i]=mod2(fac[i],mod-2);
	}
}
void ncr(){
	for(llo i=0;i<n+1;i++){
		for(llo j=0;j<=i;j++){
			com[i][j]=fac2[j]*fac2[i-j];
			com[i][j]%=mod;
			com[i][j]*=fac[i];
			com[i][j]%=mod;
			//cout<<i<<"      "<<j<<" "<<com[i][j]<<endl;
		//	cout<<fac[i]<<"   "<<fac2[j]<<"   "<<fac2[i-j]<<endl;
		}
	}
}
void comp2(){
	fac[0]=1;
	for(llo i=0;i<ind2;i++){
		llo cur=1;
		pre[i][0]=0;
		for(llo j=1;j<n+1;j++){
			if(j<=si[i]){
				cur*=mod2(j,mod-2);
				cur%=mod;
				cur*=(si[i]-j+1);
				cur%=mod;
				pre[i][j]=cur;
			//	pre[i][j]+=pre[i][j-1];
			//	pre[i][j]%=mod;
			}
			else{
				pre[i][j]=0;
			}
		//	cout<<i<<" "<<si[i]<<"  "<<j<<":"<<pre[i][j]<<endl;
		}		
	}
	for(llo i=0;i<ind2;i++){
		for(llo j=1;j<n+1;j++){
			pre2[i][j]=0;
			/*if(j>si[i]){
				continue;
			}*/
			for(llo k=1;k<=j;k++){
				pre2[i][j]+=pre[i][k]*com[j-1][k-1];
				pre2[i][j]%=mod;
			}
		//	cout<<i<<"::"<<j<<" "<<pre2[i][j]<<endl;
		}
	}
}

int main(){
	cin>>n;
	for(llo i=0;i<n;i++){
		cin>>aa>>bb;
		cc.pb(aa);
		cc.pb(bb);
		it.pb({aa,bb});
	}
	comp();//factorial
	ncr();//computing iCj for i and j from 1 to n
	sort(cc.begin(),cc.end());
	for(llo i=0;i<cc.size();i++){
		if(i<cc.size()-1 and cc[i]==cc[i+1]){
			continue;
		}
		dd[cc[i]]=ind2;
		ind2+=1;

		si[dd[cc[i]]]=1;
		//cout<<ind2-1<<" "<<si[ind2]<<endl;
		if(i<cc.size()-1){
			if(cc[i]<cc[i+1]-1){
				si[ind2]=cc[i+1]-cc[i]-1;
		//		cout<<ind2<<","<<si[ind2]<<endl;
				ind2+=1;
			}
		}
	}
	comp2();
	for(llo i=0;i<n;i++){
		it[i].a=dd[it[i].a];
		it[i].b=dd[it[i].b];
	}
	/*for(int i=0;i<n;i++){
		cout<<it[i].a<<","<<it[i].b<<endl;
	}
	for(int i=0;i<ind2;i++){
		cout<<si[i]<<" ";
	}
	cout<<endl;*/


	for(llo i=0;i<n;i++){
		for(llo j=0;j<ind2;j++){
			dp[i][j]=0;
		}
	}
	for(llo j=0;j<ind2;j++){
		if(j>=it[0].a and j<=it[0].b){
			dp[0][j]=si[j];
		//	cout<<0<<","<<j<<",,"<<si[j]<<endl;
		}
		if(j>0){
			dp[0][j]+=dp[0][j-1];
		}
		dp[0][j]%=mod;
	}
	for(llo i=1;i<n;i++){
		for(llo j=it[i].a;j<=it[i].b;j++){
			llo cot=1;
			for(llo k=i-1;k>=0;k--){
				if(j>0){
					dp[i][j]+=(dp[k][j-1])*pre2[j][cot];
					dp[i][j]%=mod;
				}
				/*else{
					dp[i][j]+=pre2[j][cot];
					dp[i][j]%=mod;
				}*/
				if(it[k].a<=j and j<=it[k].b){
					cot+=1;
				}
			}
			dp[i][j]+=pre2[j][cot];
			dp[i][j]%=mod;
		//	cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
		}
		for(llo j=1;j<ind2;j++){
			dp[i][j]+=dp[i][j-1];
			dp[i][j]%=mod;
		}
	}
	llo ans=0;
	for(llo i=0;i<n;i++){
			ans+=dp[i][ind2-1];
			ans%=mod;
	}
	cout<<ans<<endl;







	
	
	return 0;
}

Compilation message

boat.cpp: In function 'int main()':
boat.cpp:105:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(llo i=0;i<cc.size();i++){
              ~^~~~~~~~~~
boat.cpp:106:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(i<cc.size()-1 and cc[i]==cc[i+1]){
      ~^~~~~~~~~~~~
boat.cpp:114:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(i<cc.size()-1){
      ~^~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1118 ms 16096 KB Output is correct
2 Correct 1122 ms 16216 KB Output is correct
3 Correct 1117 ms 16108 KB Output is correct
4 Correct 1120 ms 16084 KB Output is correct
5 Correct 1117 ms 16108 KB Output is correct
6 Correct 1107 ms 16156 KB Output is correct
7 Correct 1119 ms 16104 KB Output is correct
8 Correct 1114 ms 16152 KB Output is correct
9 Correct 1115 ms 16076 KB Output is correct
10 Correct 1110 ms 16124 KB Output is correct
11 Correct 1108 ms 16164 KB Output is correct
12 Correct 1104 ms 16244 KB Output is correct
13 Correct 1115 ms 16048 KB Output is correct
14 Correct 1110 ms 16048 KB Output is correct
15 Correct 1117 ms 16120 KB Output is correct
16 Correct 203 ms 6392 KB Output is correct
17 Correct 218 ms 6548 KB Output is correct
18 Correct 212 ms 6496 KB Output is correct
19 Correct 219 ms 6592 KB Output is correct
20 Correct 215 ms 6488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1118 ms 16096 KB Output is correct
2 Correct 1122 ms 16216 KB Output is correct
3 Correct 1117 ms 16108 KB Output is correct
4 Correct 1120 ms 16084 KB Output is correct
5 Correct 1117 ms 16108 KB Output is correct
6 Correct 1107 ms 16156 KB Output is correct
7 Correct 1119 ms 16104 KB Output is correct
8 Correct 1114 ms 16152 KB Output is correct
9 Correct 1115 ms 16076 KB Output is correct
10 Correct 1110 ms 16124 KB Output is correct
11 Correct 1108 ms 16164 KB Output is correct
12 Correct 1104 ms 16244 KB Output is correct
13 Correct 1115 ms 16048 KB Output is correct
14 Correct 1110 ms 16048 KB Output is correct
15 Correct 1117 ms 16120 KB Output is correct
16 Correct 203 ms 6392 KB Output is correct
17 Correct 218 ms 6548 KB Output is correct
18 Correct 212 ms 6496 KB Output is correct
19 Correct 219 ms 6592 KB Output is correct
20 Correct 215 ms 6488 KB Output is correct
21 Correct 1624 ms 23368 KB Output is correct
22 Correct 1602 ms 23436 KB Output is correct
23 Correct 1560 ms 23228 KB Output is correct
24 Correct 1606 ms 23424 KB Output is correct
25 Correct 1562 ms 23040 KB Output is correct
26 Correct 1746 ms 22540 KB Output is correct
27 Correct 1728 ms 22660 KB Output is correct
28 Correct 1727 ms 22704 KB Output is correct
29 Correct 1727 ms 22748 KB Output is correct
30 Correct 1657 ms 24988 KB Output is correct
31 Correct 1672 ms 24672 KB Output is correct
32 Correct 1661 ms 24664 KB Output is correct
33 Correct 1664 ms 24712 KB Output is correct
34 Correct 1643 ms 24588 KB Output is correct
35 Correct 1077 ms 16120 KB Output is correct
36 Correct 1076 ms 16260 KB Output is correct
37 Correct 1088 ms 16236 KB Output is correct
38 Correct 1074 ms 16276 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 36 ms 4608 KB Output is correct
2 Correct 35 ms 4608 KB Output is correct
3 Correct 36 ms 4608 KB Output is correct
4 Correct 36 ms 4600 KB Output is correct
5 Correct 40 ms 4532 KB Output is correct
6 Correct 38 ms 4608 KB Output is correct
7 Correct 39 ms 4600 KB Output is correct
8 Correct 39 ms 4608 KB Output is correct
9 Correct 39 ms 4600 KB Output is correct
10 Correct 39 ms 4600 KB Output is correct
11 Correct 36 ms 4608 KB Output is correct
12 Correct 35 ms 4600 KB Output is correct
13 Correct 39 ms 4728 KB Output is correct
14 Correct 35 ms 4600 KB Output is correct
15 Correct 35 ms 4600 KB Output is correct
16 Correct 18 ms 2560 KB Output is correct
17 Correct 19 ms 2688 KB Output is correct
18 Correct 19 ms 2688 KB Output is correct
19 Correct 18 ms 2560 KB Output is correct
20 Correct 19 ms 2688 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1118 ms 16096 KB Output is correct
2 Correct 1122 ms 16216 KB Output is correct
3 Correct 1117 ms 16108 KB Output is correct
4 Correct 1120 ms 16084 KB Output is correct
5 Correct 1117 ms 16108 KB Output is correct
6 Correct 1107 ms 16156 KB Output is correct
7 Correct 1119 ms 16104 KB Output is correct
8 Correct 1114 ms 16152 KB Output is correct
9 Correct 1115 ms 16076 KB Output is correct
10 Correct 1110 ms 16124 KB Output is correct
11 Correct 1108 ms 16164 KB Output is correct
12 Correct 1104 ms 16244 KB Output is correct
13 Correct 1115 ms 16048 KB Output is correct
14 Correct 1110 ms 16048 KB Output is correct
15 Correct 1117 ms 16120 KB Output is correct
16 Correct 203 ms 6392 KB Output is correct
17 Correct 218 ms 6548 KB Output is correct
18 Correct 212 ms 6496 KB Output is correct
19 Correct 219 ms 6592 KB Output is correct
20 Correct 215 ms 6488 KB Output is correct
21 Correct 1624 ms 23368 KB Output is correct
22 Correct 1602 ms 23436 KB Output is correct
23 Correct 1560 ms 23228 KB Output is correct
24 Correct 1606 ms 23424 KB Output is correct
25 Correct 1562 ms 23040 KB Output is correct
26 Correct 1746 ms 22540 KB Output is correct
27 Correct 1728 ms 22660 KB Output is correct
28 Correct 1727 ms 22704 KB Output is correct
29 Correct 1727 ms 22748 KB Output is correct
30 Correct 1657 ms 24988 KB Output is correct
31 Correct 1672 ms 24672 KB Output is correct
32 Correct 1661 ms 24664 KB Output is correct
33 Correct 1664 ms 24712 KB Output is correct
34 Correct 1643 ms 24588 KB Output is correct
35 Correct 1077 ms 16120 KB Output is correct
36 Correct 1076 ms 16260 KB Output is correct
37 Correct 1088 ms 16236 KB Output is correct
38 Correct 1074 ms 16276 KB Output is correct
39 Correct 36 ms 4608 KB Output is correct
40 Correct 35 ms 4608 KB Output is correct
41 Correct 36 ms 4608 KB Output is correct
42 Correct 36 ms 4600 KB Output is correct
43 Correct 40 ms 4532 KB Output is correct
44 Correct 38 ms 4608 KB Output is correct
45 Correct 39 ms 4600 KB Output is correct
46 Correct 39 ms 4608 KB Output is correct
47 Correct 39 ms 4600 KB Output is correct
48 Correct 39 ms 4600 KB Output is correct
49 Correct 36 ms 4608 KB Output is correct
50 Correct 35 ms 4600 KB Output is correct
51 Correct 39 ms 4728 KB Output is correct
52 Correct 35 ms 4600 KB Output is correct
53 Correct 35 ms 4600 KB Output is correct
54 Correct 18 ms 2560 KB Output is correct
55 Correct 19 ms 2688 KB Output is correct
56 Correct 19 ms 2688 KB Output is correct
57 Correct 18 ms 2560 KB Output is correct
58 Correct 19 ms 2688 KB Output is correct
59 Execution timed out 2086 ms 17664 KB Time limit exceeded
60 Halted 0 ms 0 KB -