Submission #1197803

#TimeUsernameProblemLanguageResultExecution timeMemory
1197803aarb_.tomatexdBoat (APIO16_boat)C++20
100 / 100
204 ms8740 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define pb push_back
const int mxN = 500, M = 1e9+7;
int n, a[mxN], b[mxN];
ll dp[mxN+1][2*mxN], c[2*mxN][mxN+1];
vector<int>pts;
inline ll modI(ll a, ll m){ return a<=1?a:(1-modI(m%a,a)*m)/a+m; }

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cin >> n;
    for(int i=0;i<n;i++){
        cin >> a[i] >> b[i], --a[i];
        pts.pb(a[i]); pts.pb(b[i]);
    }
    sort(pts.begin(), pts.end());
    pts.resize(unique(pts.begin(), pts.end())-pts.begin());
    for(int i=1;i<pts.size();i++){
        c[i][1] = pts[i]-pts[i-1];
        for(int j=2;j<=n;j++) c[i][j]=c[i][j-1]*(pts[i]-pts[i-1]+j-1)%M*modI(j,M)%M;
    }
    for(int i=0;i<pts.size();i++) dp[0][i]=1;
    for(int i=1;i<=n;i++){
        dp[i][0] = 1;
        for(int j=1;j<pts.size();j++){
            dp[i][j] = dp[i][j-1];
            for(int k=i,n2=0;k;k--){
                if(pts[j]>a[k-1]and pts[j]<=b[k-1]){
                    ++n2;
                    dp[i][j]+=dp[k-1][j-1]*c[j][n2]%M;
                }
            }
            dp[i][j]%=M;
        }
    }
    cout<<dp[n][pts.size()-1]-1<<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...