Submission #76734

#TimeUsernameProblemLanguageResultExecution timeMemory
76734vexBoat (APIO16_boat)C++14
0 / 100
8 ms4824 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]; pair<pii,int> 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},i}; d[2*i]={{a[i][1],1},i}; } sort(d+1,d+2*n+1); for(int i=1;i<=2*n;i++) { if(d[i].f.s==0) pl[ d[i].s ]=i; else pr[ d[i].s ]=i; } for(int i=1;i<=n;i++)dp[0][i]=0; dp[0][0]=1; dp[0][d[1].s]=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.f==d[i+1].f.f)continue; if(pl[j]==i+1)dod=1; else if(pl[j]<=i && i+1<=pr[j])dod=d[i+1].f.f-d[i].f.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; } } } 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.f<<" "<<d[i].f.s<<" "<<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...