Submission #1235043

#TimeUsernameProblemLanguageResultExecution timeMemory
1235043countlessBoat (APIO16_boat)C++20
100 / 100
466 ms4404 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define sp <<" "<< #define endl "\n" const ll MOD = 1e9+7; const int MAXK = 1e3+5; vector<int> feli; ll inv[MAXK]; ll binpow(ll a, ll b) { ll res = 1; while (b) { if (b & 1) res = (res * a) % MOD; a = (a * a) % MOD; b >>= 1; } return res; } int o(int x) { return lower_bound(feli.begin(), feli.end(), x) - feli.begin(); } void gen() { inv[0] = 0; for (int i = 1; i < MAXK; i++) { inv[i] = binpow(i, MOD-2); } } void solve() { int n; cin >> n; vector<int> l(n+1), r(n+1); for (int i = 1; i <= n; i++) { cin >> l[i] >> r[i]; feli.push_back(--l[i]); feli.push_back(r[i]); } sort(feli.begin(), feli.end()); feli.erase(unique(feli.begin(), feli.end()), feli.end()); for (int i = 1; i <= n; i++) { l[i] = o(l[i]); r[i] = o(r[i]); } int m = feli.size(); vector<vector<ll>> dp(n+1, vector<ll>(m, 0)); dp[0][0] = 1; for (int j = 1; j < m; j++) { dp[0][j] = 1; for (int i = 1; i <= n; i++) { dp[i][j] = dp[i][j-1]; ll cnt = 1, eff = feli[j] - feli[j-1]; if (!(l[i] < j and j <= r[i])) continue; for (int k = i-1; k >= 0; k--) { dp[i][j] = (dp[i][j] + ((dp[k][j-1] * eff) % MOD)) % MOD; if (l[k] < j and j <= r[k]) { eff = (((eff * (cnt + feli[j] - feli[j-1])) % MOD) * inv[cnt+1]) % MOD; cnt++; } } } } ll ans = 0; for (int i = 1; i <= n; i++) ans = (ans + dp[i][m-1]) % MOD; cout << ans << endl; } signed main() { cin.tie(0); ios_base::sync_with_stdio(false); gen(); int t = 1; // cin >> t; while (t--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...