Submission #245129

#TimeUsernameProblemLanguageResultExecution timeMemory
245129HuyQuang_re_ZeroBoat (APIO16_boat)C++14
9 / 100
35 ms22008 KiB
#include <bits/stdc++.h> #define ll long long #define N 1000001 using namespace std; const ll mod=round(1e9)+7; ll gt[N],ng[N],sum,f[2001][2001]; long long C(int k,int n) { if(k>n) return 0; return gt[n]*ng[k]%mod*ng[n-k]%mod; } int i,j,k,n,m; struct pt { int l,r; }; pt b[N],a[N]; set <int> s; ll lt(ll a,ll b) { if(b==0) return 1; ll tg=lt(a,b/2); if(b%2==0) return tg*tg%mod; return tg*tg%mod*a%mod; } int main() { // freopen("ntu.inp","r",stdin); //freopen("ntu.out","w",stdout); sum=0; cin>>n; for(i=1;i<=n;i++) { cin>>a[i].l>>a[i].r; s.insert(a[i].l); s.insert(a[i].r); sum+=a[i].r-a[i].l+1; } gt[0]=1; for(i=1;i<=sum;i++) gt[i]=gt[i-1]*i%mod; ng[sum]=lt(gt[sum],mod-2); for(i=sum-1;i>=0;i--) ng[i]=ng[i+1]*(i+1)%mod; for(set <int>::iterator it=s.begin();it!=s.end();it++) { b[++m]={ (*it),(*it) }; set <int>::iterator it2=it; it2++; if(it2!=s.end() && (*it)+1<(*it2)) b[++m]={ (*it)+1,(*it2)-1 }; } for(i=0;i<=n;i++) f[i][0]=1; for(i=0;i<=n;i++) for(j=1;j<=m;j++) { f[i][j]=(f[i][j-1]+f[i-1][j]-f[i-1][j-1])%mod; for(k=i;i-k<=b[j].r-b[j].l && k>=1;k--) { if(a[k].r<b[j].l || a[k].l>b[j].r) break; f[i][j]=(f[i][j]+f[k-1][j-1]*C(i-k+1,b[j].r-b[j].l+1))%mod; } // cerr<<i<<" "<<j<<" "<<f[i][j]<<'\n'; } cout<<(f[n][m]-1+mod)%mod; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...