Submission #1187504

#TimeUsernameProblemLanguageResultExecution timeMemory
1187504asli_bgBoat (APIO16_boat)C++20
0 / 100
5 ms8264 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define int long long typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<pii> vii; typedef vector<bool> vb; typedef tree<pii,null_type,less<pii>,rb_tree_tag, tree_order_statistics_node_update> oset; #define fi first #define se second #define pb push_back #define pf push_front #define mid (l+r)/2 #define all(x) x.begin(),x.end() #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define sp <<" "<< #define DEBUG(x) cout<<(#x) sp x<<endl #define carp(a,b) (((a%MOD)*(b%MOD))%MOD) #define topla(a,b) (((a%MOD)+(b%MOD))%MOD) const int INF=1e18; const int MAXN=1e3+5; const int MOD=1e9+7; int dp[MAXN][MAXN]; /*dp[i][j] --> i.segmente kadar j.ye kadarki okulları kullandım kaç farklı yol var*/ int fac[MAXN], inv[MAXN]; int exp(int x,int us){ int res=1; while(us>0){ if(us&1) res=carp(res,x); x=carp(x,x); us/=2; } return res; } void calc(){ fac[0]=fac[1]=1; FORE(i,2,MAXN){ fac[i]=carp(fac[i-1],i); inv[i]=exp(fac[i],MOD-2); } } int comb(int n,int r){ if(r>n) return 0; return carp(fac[n],carp(inv[n-r],inv[r])); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); calc(); int n; cin>>n; vi a(n+1),b(n+1); set<int> s; FORE(i,1,n+1){ cin>>a[i]>>b[i]; s.insert(a[i]); s.insert(b[i]+1); } vi vec; for(auto el:s) vec.pb(el); vii ara; ara.pb({0,0}); FORE(i,1,vec.size()){ ara.pb({vec[i-1],vec[i]-1}); } //contp(ara); int sz=ara.size(); int ans=0; dp[0][0]=1; FORE(i,1,sz){ int len=ara[i].se-ara[i].fi+1; //DEBUG(len); dp[i][0]=1; FORE(j,1,n+1){ //j.ye kadar okulları kullan dp[i][j]=dp[i-1][j]; int say=1; int mult=len; if(a[j]<=ara[i].fi and ara[i].se<=b[j]){ //cout<<"hh" sp i sp j<<endl; for(int k=j-1;k>=0;k--){ //k.okuldan j.ye geç //cout<<"here" sp i-1 sp k sp dp[i-1][k]<<endl; dp[i][j]=topla(dp[i][j],carp(dp[i-1][k],mult)); if(a[k]<=ara[i].fi and ara[i].se<=b[k]){ mult=carp(mult,comb(len+say-1,say)); say++; } } } } } //DEBUG(dp[sz-1][n]); FORE(i,1,n+1){ ans=topla(ans,dp[sz-1][i]); } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...