Submission #376079

#TimeUsernameProblemLanguageResultExecution timeMemory
376079shivensinha4Boat (APIO16_boat)C++17
36 / 100
1495 ms24812 KiB
#include "bits/stdc++.h" using namespace std; #define for_(i, s, e) for (int i = s; i < (int) e; i++) #define for__(i, s, e) for (ll i = s; i < e; i++) typedef long long ll; typedef vector<int> vi; typedef array<int, 2> ii; #define endl '\n' const ll mod = 1e9+7; ll power(ll x, ll y) { if (y == 0) return 1; ll p = power(x, y/2) % mod; p = (p * p) % mod; return (y%2 == 0)? p : (x * p) % mod; } ll modInverse(ll a) { return power(a, mod-2); } const int MXN = 500; ll choose[2*MXN+2][MXN+1], dp[2][MXN+1][MXN+1][2]; int main() { #ifdef mlocal freopen("test.in", "r", stdin); #endif ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<ii> lt(n); vi raw(2*n); for_(i, 0, n) { cin >> lt[i][0] >> lt[i][1]; raw[2*i] = lt[i][0], raw[2*i+1] = lt[i][1]; } sort(raw.begin(), raw.end()); raw.resize(unique(raw.begin(), raw.end()) - raw.begin()); vector<ii> seg; int pre = -1; for_(i, 0, raw.size()) { if (pre < raw[i] and pre != -1) seg.push_back({pre, raw[i]-1}); seg.push_back({raw[i], raw[i]}); pre = raw[i]+1; } int ns = seg.size(); memset(choose, 0, sizeof(choose)); memset(dp, 0, sizeof(dp)); for_(i, 0, ns) { choose[i][0] = 1; for_(r, 1, min(n, seg[i][1]-seg[i][0]+1) + 1) choose[i][r] = (((choose[i][r-1] * (seg[i][1]-seg[i][0]-r+2)) % mod) * modInverse(r)) % mod; } int c = 0; for (int s = ns-1; s >= 0; s--) { memset(dp[c], 0, sizeof(dp[c])); for (int ct = min(n-1, seg[s][1]-seg[s][0]+1); ct >= 0; ct--) { dp[c][ct][n][0] = choose[s][ct]; for (int idx = n-1; idx >= 0; idx--) { if (seg[s][0] >= lt[idx][0] and seg[s][1] <= lt[idx][1]) dp[c][ct][idx][1] += dp[c][ct+1][idx+1][0]; if (dp[c][ct][idx][1] >= mod) dp[c][ct][idx][1] -= mod; dp[c][ct][idx][1] += (choose[s][ct] * (s < ns-1 ? dp[1-c][0][idx][1] : 0)) % mod; if (dp[c][ct][idx][1] >= mod) dp[c][ct][idx][1] -= mod; dp[c][ct][idx][0] = (dp[c][ct][idx][1] + dp[c][ct][idx+1][0]) % mod; } } c = 1-c; } cout << (dp[1-c][0][0][0]-1+mod) % mod << 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...