#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;
}
}
}
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;
}
else{
pre[i][j]=0;
}
}
}
for(llo i=0;i<ind2;i++){
for(llo j=1;j<n+1;j++){
pre2[i][j]=0;
int l=0;
for(llo k=1;k<=j;k++){
pre2[i][j]+=pre[i][k]*com[j-1][k-1];
l+=1;
if(l==4){
l=0;
pre2[i][j]%=mod;
}
}
pre2[i][j]%=mod;
}
}
}
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;
if(i<cc.size()-1){
if(cc[i]<cc[i+1]-1){
si[ind2]=cc[i+1]-cc[i]-1;
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(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];
}
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;
int l=0;
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;
if(l==4){
dp[i][j]%=mod;
l=0;
}
l+=1;
}
if(it[k].a<=j and j<=it[k].b){
cot+=1;
}
}
dp[i][j]+=pre2[j][cot];
dp[i][j]%=mod;
}
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:102:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(llo i=0;i<cc.size();i++){
~^~~~~~~~~~
boat.cpp:103:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(i<cc.size()-1 and cc[i]==cc[i+1]){
~^~~~~~~~~~~~
boat.cpp:110:7: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(i<cc.size()-1){
~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
419 ms |
16120 KB |
Output is correct |
2 |
Correct |
422 ms |
16124 KB |
Output is correct |
3 |
Correct |
421 ms |
16124 KB |
Output is correct |
4 |
Correct |
421 ms |
16152 KB |
Output is correct |
5 |
Correct |
417 ms |
16120 KB |
Output is correct |
6 |
Correct |
433 ms |
16120 KB |
Output is correct |
7 |
Correct |
424 ms |
16248 KB |
Output is correct |
8 |
Correct |
418 ms |
16120 KB |
Output is correct |
9 |
Correct |
415 ms |
16120 KB |
Output is correct |
10 |
Correct |
414 ms |
16120 KB |
Output is correct |
11 |
Correct |
422 ms |
16040 KB |
Output is correct |
12 |
Correct |
423 ms |
16120 KB |
Output is correct |
13 |
Correct |
419 ms |
16252 KB |
Output is correct |
14 |
Correct |
422 ms |
16216 KB |
Output is correct |
15 |
Correct |
425 ms |
16120 KB |
Output is correct |
16 |
Correct |
82 ms |
6392 KB |
Output is correct |
17 |
Correct |
88 ms |
6524 KB |
Output is correct |
18 |
Correct |
84 ms |
6392 KB |
Output is correct |
19 |
Correct |
88 ms |
6520 KB |
Output is correct |
20 |
Correct |
86 ms |
6520 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
419 ms |
16120 KB |
Output is correct |
2 |
Correct |
422 ms |
16124 KB |
Output is correct |
3 |
Correct |
421 ms |
16124 KB |
Output is correct |
4 |
Correct |
421 ms |
16152 KB |
Output is correct |
5 |
Correct |
417 ms |
16120 KB |
Output is correct |
6 |
Correct |
433 ms |
16120 KB |
Output is correct |
7 |
Correct |
424 ms |
16248 KB |
Output is correct |
8 |
Correct |
418 ms |
16120 KB |
Output is correct |
9 |
Correct |
415 ms |
16120 KB |
Output is correct |
10 |
Correct |
414 ms |
16120 KB |
Output is correct |
11 |
Correct |
422 ms |
16040 KB |
Output is correct |
12 |
Correct |
423 ms |
16120 KB |
Output is correct |
13 |
Correct |
419 ms |
16252 KB |
Output is correct |
14 |
Correct |
422 ms |
16216 KB |
Output is correct |
15 |
Correct |
425 ms |
16120 KB |
Output is correct |
16 |
Correct |
82 ms |
6392 KB |
Output is correct |
17 |
Correct |
88 ms |
6524 KB |
Output is correct |
18 |
Correct |
84 ms |
6392 KB |
Output is correct |
19 |
Correct |
88 ms |
6520 KB |
Output is correct |
20 |
Correct |
86 ms |
6520 KB |
Output is correct |
21 |
Correct |
559 ms |
23288 KB |
Output is correct |
22 |
Correct |
555 ms |
23544 KB |
Output is correct |
23 |
Correct |
530 ms |
23288 KB |
Output is correct |
24 |
Correct |
564 ms |
23544 KB |
Output is correct |
25 |
Correct |
539 ms |
23288 KB |
Output is correct |
26 |
Correct |
584 ms |
22520 KB |
Output is correct |
27 |
Correct |
597 ms |
22772 KB |
Output is correct |
28 |
Correct |
596 ms |
22904 KB |
Output is correct |
29 |
Correct |
597 ms |
22788 KB |
Output is correct |
30 |
Correct |
580 ms |
24824 KB |
Output is correct |
31 |
Correct |
574 ms |
24696 KB |
Output is correct |
32 |
Correct |
586 ms |
24824 KB |
Output is correct |
33 |
Correct |
584 ms |
24804 KB |
Output is correct |
34 |
Correct |
584 ms |
24696 KB |
Output is correct |
35 |
Correct |
402 ms |
16120 KB |
Output is correct |
36 |
Correct |
401 ms |
16248 KB |
Output is correct |
37 |
Correct |
409 ms |
16120 KB |
Output is correct |
38 |
Correct |
400 ms |
16120 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
23 ms |
4608 KB |
Output is correct |
2 |
Correct |
23 ms |
4608 KB |
Output is correct |
3 |
Correct |
22 ms |
4608 KB |
Output is correct |
4 |
Correct |
23 ms |
4608 KB |
Output is correct |
5 |
Correct |
22 ms |
4608 KB |
Output is correct |
6 |
Correct |
26 ms |
4608 KB |
Output is correct |
7 |
Correct |
23 ms |
4600 KB |
Output is correct |
8 |
Correct |
24 ms |
4640 KB |
Output is correct |
9 |
Correct |
23 ms |
4608 KB |
Output is correct |
10 |
Correct |
23 ms |
4608 KB |
Output is correct |
11 |
Correct |
22 ms |
4608 KB |
Output is correct |
12 |
Correct |
22 ms |
4608 KB |
Output is correct |
13 |
Correct |
22 ms |
4608 KB |
Output is correct |
14 |
Correct |
24 ms |
4608 KB |
Output is correct |
15 |
Correct |
22 ms |
4608 KB |
Output is correct |
16 |
Correct |
13 ms |
2560 KB |
Output is correct |
17 |
Correct |
13 ms |
2560 KB |
Output is correct |
18 |
Correct |
13 ms |
2560 KB |
Output is correct |
19 |
Correct |
13 ms |
2560 KB |
Output is correct |
20 |
Correct |
13 ms |
2688 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
419 ms |
16120 KB |
Output is correct |
2 |
Correct |
422 ms |
16124 KB |
Output is correct |
3 |
Correct |
421 ms |
16124 KB |
Output is correct |
4 |
Correct |
421 ms |
16152 KB |
Output is correct |
5 |
Correct |
417 ms |
16120 KB |
Output is correct |
6 |
Correct |
433 ms |
16120 KB |
Output is correct |
7 |
Correct |
424 ms |
16248 KB |
Output is correct |
8 |
Correct |
418 ms |
16120 KB |
Output is correct |
9 |
Correct |
415 ms |
16120 KB |
Output is correct |
10 |
Correct |
414 ms |
16120 KB |
Output is correct |
11 |
Correct |
422 ms |
16040 KB |
Output is correct |
12 |
Correct |
423 ms |
16120 KB |
Output is correct |
13 |
Correct |
419 ms |
16252 KB |
Output is correct |
14 |
Correct |
422 ms |
16216 KB |
Output is correct |
15 |
Correct |
425 ms |
16120 KB |
Output is correct |
16 |
Correct |
82 ms |
6392 KB |
Output is correct |
17 |
Correct |
88 ms |
6524 KB |
Output is correct |
18 |
Correct |
84 ms |
6392 KB |
Output is correct |
19 |
Correct |
88 ms |
6520 KB |
Output is correct |
20 |
Correct |
86 ms |
6520 KB |
Output is correct |
21 |
Correct |
559 ms |
23288 KB |
Output is correct |
22 |
Correct |
555 ms |
23544 KB |
Output is correct |
23 |
Correct |
530 ms |
23288 KB |
Output is correct |
24 |
Correct |
564 ms |
23544 KB |
Output is correct |
25 |
Correct |
539 ms |
23288 KB |
Output is correct |
26 |
Correct |
584 ms |
22520 KB |
Output is correct |
27 |
Correct |
597 ms |
22772 KB |
Output is correct |
28 |
Correct |
596 ms |
22904 KB |
Output is correct |
29 |
Correct |
597 ms |
22788 KB |
Output is correct |
30 |
Correct |
580 ms |
24824 KB |
Output is correct |
31 |
Correct |
574 ms |
24696 KB |
Output is correct |
32 |
Correct |
586 ms |
24824 KB |
Output is correct |
33 |
Correct |
584 ms |
24804 KB |
Output is correct |
34 |
Correct |
584 ms |
24696 KB |
Output is correct |
35 |
Correct |
402 ms |
16120 KB |
Output is correct |
36 |
Correct |
401 ms |
16248 KB |
Output is correct |
37 |
Correct |
409 ms |
16120 KB |
Output is correct |
38 |
Correct |
400 ms |
16120 KB |
Output is correct |
39 |
Correct |
23 ms |
4608 KB |
Output is correct |
40 |
Correct |
23 ms |
4608 KB |
Output is correct |
41 |
Correct |
22 ms |
4608 KB |
Output is correct |
42 |
Correct |
23 ms |
4608 KB |
Output is correct |
43 |
Correct |
22 ms |
4608 KB |
Output is correct |
44 |
Correct |
26 ms |
4608 KB |
Output is correct |
45 |
Correct |
23 ms |
4600 KB |
Output is correct |
46 |
Correct |
24 ms |
4640 KB |
Output is correct |
47 |
Correct |
23 ms |
4608 KB |
Output is correct |
48 |
Correct |
23 ms |
4608 KB |
Output is correct |
49 |
Correct |
22 ms |
4608 KB |
Output is correct |
50 |
Correct |
22 ms |
4608 KB |
Output is correct |
51 |
Correct |
22 ms |
4608 KB |
Output is correct |
52 |
Correct |
24 ms |
4608 KB |
Output is correct |
53 |
Correct |
22 ms |
4608 KB |
Output is correct |
54 |
Correct |
13 ms |
2560 KB |
Output is correct |
55 |
Correct |
13 ms |
2560 KB |
Output is correct |
56 |
Correct |
13 ms |
2560 KB |
Output is correct |
57 |
Correct |
13 ms |
2560 KB |
Output is correct |
58 |
Correct |
13 ms |
2688 KB |
Output is correct |
59 |
Correct |
1093 ms |
25976 KB |
Output is correct |
60 |
Correct |
1072 ms |
25940 KB |
Output is correct |
61 |
Correct |
1073 ms |
25976 KB |
Output is correct |
62 |
Correct |
1080 ms |
26100 KB |
Output is correct |
63 |
Correct |
1081 ms |
25848 KB |
Output is correct |
64 |
Correct |
1181 ms |
25972 KB |
Output is correct |
65 |
Correct |
1190 ms |
25976 KB |
Output is correct |
66 |
Correct |
1201 ms |
26180 KB |
Output is correct |
67 |
Correct |
1209 ms |
26104 KB |
Output is correct |
68 |
Correct |
1218 ms |
25976 KB |
Output is correct |
69 |
Correct |
1012 ms |
25976 KB |
Output is correct |
70 |
Correct |
1012 ms |
26052 KB |
Output is correct |
71 |
Correct |
1010 ms |
26172 KB |
Output is correct |
72 |
Correct |
1022 ms |
25976 KB |
Output is correct |
73 |
Correct |
1022 ms |
26104 KB |
Output is correct |
74 |
Correct |
119 ms |
6648 KB |
Output is correct |
75 |
Correct |
118 ms |
6776 KB |
Output is correct |
76 |
Correct |
120 ms |
6772 KB |
Output is correct |
77 |
Correct |
121 ms |
6648 KB |
Output is correct |
78 |
Correct |
121 ms |
6648 KB |
Output is correct |