Submission #1076388

#TimeUsernameProblemLanguageResultExecution timeMemory
1076388alexddBoat (APIO16_boat)C++17
100 / 100
1196 ms8664 KiB
#include<bits/stdc++.h> using namespace std; #define int long long const int MOD = 1e9+7; const int MAXV = 2000; int put(int a, int exp) { if(exp==0) return 1; if(exp%2==0) return put(a*a%MOD,exp/2); else return put(a*a%MOD,exp/2)*a%MOD; } int n,cate; int le[505],ri[505]; map<int,int> mp,nrm; int invnrm[MAXV+5],nr[MAXV+5]; int dp[MAXV+5][505]; int sumdp[MAXV+5]; int prec_inv[505]; signed main() { cin>>n; for(int i=1;i<=n;i++) { cin>>le[i]>>ri[i]; mp[le[i]]++; mp[ri[i]]++; prec_inv[i] = put(i,MOD-2); } for(auto it:mp) { if(it.second) { nrm[it.first]=++cate; invnrm[cate]=it.first; cate++; } } for(int i=1;i<=cate;i+=2) { nr[i]=1; nr[i+1]=invnrm[i+2]-invnrm[i]-1; } dp[0][0]=1; sumdp[0]=1; for(int ult=1;ult<cate;ult++) sumdp[ult] = sumdp[ult-1]; for(int i=1;i<=n;i++) { le[i] = nrm[le[i]]; ri[i] = nrm[ri[i]]; for(int ult=ri[i];ult>=le[i];ult--) { for(int cnt=min(i,nr[ult]);cnt>1;cnt--) { dp[ult][cnt]= (dp[ult][cnt] + dp[ult][cnt-1] * (nr[ult]-cnt+1)%MOD * prec_inv[cnt])%MOD; } dp[ult][1] = (dp[ult][1] + sumdp[ult-1]*nr[ult])%MOD; } sumdp[0]=1; for(int ult=1;ult<cate;ult++) { sumdp[ult] = sumdp[ult-1]; for(int cnt=1;cnt<=i;cnt++) sumdp[ult] = (sumdp[ult] + dp[ult][cnt])%MOD; } } int rez=0; for(int ult=1;ult<=cate;ult++) for(int cnt=1;cnt<=n;cnt++) rez = (rez + dp[ult][cnt])%MOD; cout<<rez; 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...