Submission #745233

#TimeUsernameProblemLanguageResultExecution timeMemory
745233amirhoseinfar1385Boat (APIO16_boat)C++17
100 / 100
1557 ms4428 KiB
#include<bits/stdc++.h> using namespace std; int mod=1e9+7; const int maxn=501; long long dp[maxn*2+10][maxn+2]; long long ps[maxn*2+10]; int rev[maxn+10]; pair<int,int>all[maxn+10]; vector<int>allind; long long mypow(long long m,long long y){ if(y==0){ return 1; } long long p=mypow(m,(y>>1)); p*=p; p%=mod; if(y&1){ p*=m; p%=mod; } return p; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; for(int i=0;i<=n+5;i++){ rev[i]=mypow(i,mod-2); } for(int i=1;i<=n;i++){ cin>>all[i].first>>all[i].second; allind.push_back(all[i].second); allind.push_back(all[i].first-1); } allind.push_back(0); sort(allind.begin(),allind.end()); allind.resize(unique(allind.begin(),allind.end())-allind.begin()); int sz=(int)allind.size()+1; dp[0][0]=1; for(int i=0;i<sz+10;i++){ ps[i]=1; } for(int i=1;i<=n;i++){ int l=lower_bound(allind.begin(),allind.end(),all[i].first)-allind.begin(); int r=lower_bound(allind.begin(),allind.end(),all[i].second)-allind.begin(); for(int j=l;j<=r;j++){ int cnt=allind[j]-allind[j-1]; for(int h=n;h>=2;h--){ dp[j][h]=(dp[j][h]+dp[j][h-1]*(cnt-(h-1))%mod*rev[h])%mod; } dp[j][1]=(dp[j][1]+ps[j-1]*cnt)%mod; } ps[0]=dp[0][0]; for(int i=1;i<=sz+9;i++){ ps[i]=ps[i-1]; for(int h=0;h<=n;h++){ ps[i]+=dp[i][h]; } ps[i]%=mod; } } long long res=ps[sz+8]; res+=mod-1; res%=mod; cout<<res<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...