Submission #1220635

#TimeUsernameProblemLanguageResultExecution timeMemory
1220635obamagamingBoat (APIO16_boat)C++20
100 / 100
607 ms4412 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 503;
const int MOD = 1e9 + 7;
#define int long long

int n, l[MAXN], r[MAXN], dp[MAXN][MAXN * 2], inv[MAXN];
vector<int> vt;
vector<pair<int, int>> segment;

int pw(int a, int b){
    int res = 1;
    while(b){
        if (b & 1) res = res * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return res;
}

main(){
    //freopen("test.inp", "r", stdin);
    //freopen("test.out", "w", stdout);
    cin >> n;
    for (int i = 1; i <= n; i++){
        cin >> l[i] >> r[i];
        vt.push_back(l[i]);
        vt.push_back(r[i] + 1);
    }
    sort(vt.begin(), vt.end());
    segment.push_back({0, 0});

    for (int i = 1; i < vt.size(); i++){
        if (vt[i] != vt[i - 1]) segment.push_back({vt[i - 1], vt[i] - 1});
    }

    for (int j = 0; j < segment.size(); j++) dp[0][j] = 1;

    inv[0] = 1;
    for (int i = 1; i < MAXN; i++) inv[i] = pw(i, MOD - 2);

    for (int i = 1; i <= n; i++){
        dp[i][0] = 1;
        for (int j = 1; j < segment.size(); j++){
            dp[i][j] = dp[i][j - 1];
            auto[a, b] = segment[j];
            int cnt = 0, sum = 1;
            for (int k = i; k >= 1; k--){
                if (l[k] <= a && b <= r[k]){
                    cnt++;
                    sum = (sum * (b - a + cnt) % MOD) * inv[cnt] % MOD;
                    //C(b - a + cnt, cnt)
                    dp[i][j] += dp[k - 1][j - 1] * sum % MOD;
                    dp[i][j] %= MOD;
                    //if (i == 3 && j == 1) cout << k << ' ' << sum << " " << dp[k - 1][j - 1] << '\n';
                }
            }
            //cout << "Doan " << i << " la [" << l[i] << ", " << r[i] << "], ";
            //cout << "Segment " << j << ": [" << a << ", " << b << "], ";
            //cout << "dp[" << i << "][" << j << "]: " << dp[i][j] << '\n';
        }
    }

    cout << (dp[n][segment.size() - 1] - 1 + MOD) % MOD;
}

Compilation message (stderr)

boat.cpp:21:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   21 | main(){
      | ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...