Submission #1188561

#TimeUsernameProblemLanguageResultExecution timeMemory
1188561MalixBoat (APIO16_boat)C++20
36 / 100
2094 ms8264 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vii; typedef pair<int,int> pi; typedef vector<pi> pii; typedef tuple<ll,ll,ll> ti; typedef vector<ll> li; typedef vector<li> lii; #define REP(i,a,b) for(int i=a;i<b;i++) #define F first #define S second #define PB push_back #define LSOne(s) ((s)&(-s)) ll INF=1000000000000000010; int inf=1e9+10; ll M=1e9+7; ll md(ll x){ ll b=M-2; ll ans=1; while(b){ if(b&1){ ans*=x; ans%=M; } b/=2; x=(x*x)%M; } return ans; } int main() { // ios::sync_with_stdio(0); // cin.tie(0); int n;cin>>n; vector<pair<ll,ll>> a(n); set<ll> tmp; vector<ll> arr; REP(i,0,n){ cin>>a[i].F>>a[i].S; a[i].S++; tmp.insert(a[i].F); tmp.insert(a[i].S); } for(auto u:tmp)arr.PB(u); sort(arr.begin(),arr.end()); arr.back(); arr.PB(arr.back()+1); int m=arr.size()-1; vector<vector<ll>> dp(n,vector<ll>(m,0)),sm(n,vector<ll>(m,0)); REP(i,0,n){ REP(j,0,m){ if(arr[j]<a[i].F)continue; if(arr[j]==a[i].S)break; dp[i][j]=arr[j+1]-arr[j]; sm[i][j]=1; if(j!=0)REP(k,0,i){ sm[i][j]+=dp[k][j-1]; sm[i][j]%=M; dp[i][j]+=dp[k][j-1]*(arr[j+1]-arr[j]); dp[i][j]%=M; } ll N=arr[j+1]-arr[j]-1; ll K=1; ll tot=N; for(int k=i-1;k>=0;k--){ if(sm[k][j]==0)continue; N++;K++; tot*=N; tot%=M; tot*=md(K); tot%=M; dp[i][j]+=tot*sm[k][j]; dp[i][j]%=M; } } REP(j,1,m)dp[i][j]+=dp[i][j-1]; } ll ans=0; REP(i,0,n){ ans+=dp[i][m-1]; ans%=M; } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...