Submission #1203229

#TimeUsernameProblemLanguageResultExecution timeMemory
1203229thinknoexitBoat (APIO16_boat)C++17
100 / 100
947 ms8388 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 505; const ll MOD = 1e9 + 7; int a[N], b[N]; ll fac[N], inv[N]; ll sum[2 * N], qs[2 * N]; ll nCr[2 * N][N]; ll dp[2 * N][N]; // currently in i-th interval using j school ll mop(ll a, ll p = MOD - 2) { ll ans = 1; for (;p != 0ll;p >>= 1ll, a = a * a % MOD) { if (p & 1ll) ans = ans * a % MOD; } return ans; } int main() { cin.tie(nullptr)->sync_with_stdio(false); int n; cin >> n; fac[0] = 1; for (int i = 1;i <= n;i++) { fac[i] = fac[i - 1] * i % MOD; inv[i] = mop(fac[i]); } vector<int> c; c.push_back(0); for (int i = 1;i <= n;i++) { cin >> a[i] >> b[i]; c.push_back(a[i] - 1); c.push_back(b[i]); } sort(c.begin(), c.end()); c.resize(unique(c.begin(), c.end()) - c.begin()); int sz = c.size(); for (int i = 1;i < sz;i++) { nCr[i][0] = 1; ll mul = 1; for (int j = 1;j <= min(c[i] - c[i - 1], n);j++) { mul = mul * (c[i] - c[i - 1] - j + 1) % MOD; nCr[i][j] = mul * inv[j] % MOD; } } for (int j = 0;j < sz;j++) qs[j] = 1; // 0 1 2 3 // - 1 2 - // - - 2 3 for (int i = 1;i <= n;i++) { a[i] = lower_bound(c.begin(), c.end(), a[i] - 1) - c.begin(); b[i] = lower_bound(c.begin(), c.end(), b[i]) - c.begin(); for (int j = a[i] + 1;j <= b[i];j++) { for (int k = min(c[j] - c[j - 1], n);k >= 1;k--) { sum[j] = (sum[j] - dp[j][k] * nCr[j][k] % MOD + MOD) % MOD; dp[j][k] = (dp[j][k] + dp[j][k - 1]) % MOD; if (k == 1) dp[j][k] = (dp[j][k] + qs[j - 1]) % MOD; sum[j] = (sum[j] + dp[j][k] * nCr[j][k]) % MOD; } } for (int j = 1;j < sz;j++) { qs[j] = (qs[j - 1] + sum[j]) % MOD; } // for (int j = 1;j < sz;j++) { // for (int k = 1;k <= n;k++) { // cout << dp[j][k] << " \n"[k == n]; // } // } } cout << (qs[sz - 1] - 1 + MOD) % MOD << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...