Submission #76735

#TimeUsernameProblemLanguageResultExecution timeMemory
76735vexBoat (APIO16_boat)C++14
9 / 100
311 ms4740 KiB
#include <bits/stdc++.h> #define maxn 505 #define f first #define s second #define pii pair<int,int> #define mod (long long)(1e9 + 7) using namespace std; int n; int a[maxn][2]; pii d[2*maxn]; int pl[maxn]; int pr[maxn]; long long dp[2*maxn][maxn]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n; for(int i=1;i<=n;i++) { cin>>a[i][0]>>a[i][1]; d[2*i-1]={a[i][0],0}; d[2*i]={a[i][1],1}; pl[i]=a[i][0]; pr[i]=a[i][1]; } sort(d+1,d+2*n+1); for(int i=1;i<=n;i++)dp[0][i]=0; dp[0][0]=1; for(int j=1;j<=n;j++)if(pl[j]==d[1].f)dp[0][j]=1; for(int i=1;i<=2*n-1;i++) { dp[i][0]=1; for(int j=1;j<=n;j++) { dp[i][j]=dp[i-1][j]; int dod=0; if(d[i].f==d[i+1].f)continue; if(pl[j]==d[i+1].f)dod=1; else if(pl[j]<=d[i].f && d[i+1].f<=pr[j])dod=d[i+1].f-d[i].f; else continue; //cout<<i<<" "<<j<<" "<<dod<<endl; for(int k=0;k<j;k++) { dp[i][j]+=dp[i-1][k]*dod; dp[i][j]%=mod; if(pl[j]==d[i+1].f && pl[k]<=d[i].f && d[i+1].f<=pr[k]) { dp[i][j]+=(dp[i][k]-dp[i-1][k])*(d[i+1].f-d[i].f-1)/(d[i+1].f-d[i].f); dp[i][j]%=mod; } } } } long long sol=0; for(int i=1;i<=n;i++) { sol+=dp[2*n-1][i]; sol%=mod; } //for(int i=1;i<=2*n;i++)cout<<d[i].f<<" "<<d[i].s<<endl;cout<<endl; /*for(int i=1;i<=n;i++)cout<<i<<" "<<pl[i]<<" "<<pr[i]<<endl;cout<<endl; for(int i=0;i<=2*n-1;i++) { cout<<i<<" "; for(int j=0;j<=n;j++)cout<<dp[i][j]<<" "; cout<<endl; }*/ cout<<sol<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...