Submission #198013

#TimeUsernameProblemLanguageResultExecution timeMemory
198013quocnguyen1012Boat (APIO16_boat)C++14
100 / 100
881 ms2632 KiB
#include <bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back using namespace std; typedef long long ll; const int mod = 1e9 + 7; void add(int & a, int b) { a += b; if (a >= mod) a -= mod; if (a < 0) a += mod; } int mul(int a, int b) { return 1ll * a * b % mod; } int power(int a, int b) { if (b == 0) return 1; int res = power(a, b / 2); if (b & 1) return 1ll * res * res % mod * a % mod; return 1ll * res * res % mod; } int f[505][1005]; int N, a[505], b[505], inv[505]; signed main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen("A.INP", "r")){ freopen("A.INP", "r", stdin); freopen("A.OUT", "w", stdout); } cin >> N; for (int i = 1; i < 505; ++i){ inv[i] = power(i, mod - 2); } vector<int> seg; for (int i = 1; i <= N; ++i){ cin >> a[i] >> b[i]; seg.pb(a[i] - 1); seg.pb(b[i]); } sort(seg.begin(), seg.end()); seg.erase(unique(seg.begin(), seg.end()), seg.end()); for (int i = 0; i < (int) seg.size(); ++i){ f[0][i] = 1; } for (int i = 1; i <= N; ++i){ a[i] = lower_bound(seg.begin(), seg.end(), a[i]) - seg.begin(); b[i] = lower_bound(seg.begin(), seg.end(), b[i]) - seg.begin(); } for (int i = 1; i <= N; ++i){ f[i][0] = 1; for (int val = a[i]; val <= b[i]; ++val){ int can = seg[val] - seg[val - 1]; f[i][val] = mul(f[i - 1][val - 1], can); int cnt = 1, way = can - 1; for (int k = i - 1; k >= 1; --k){ if (a[k] <= val && val <= b[k]){ way = mul(way, can++); way = mul(way, inv[++cnt]); add(f[i][val], mul(f[k - 1][val - 1], way)); } } } for (int j = 1; j < (int)seg.size(); ++j){ add(f[i][j], f[i][j - 1]); add(f[i][j], f[i - 1][j]); add(f[i][j], -f[i - 1][j - 1]); } } add(f[N][int(seg.size()) - 1], -1); cout << f[N][int(seg.size()) - 1]; }

Compilation message (stderr)

boat.cpp: In function 'int main()':
boat.cpp:40:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen("A.INP", "r", stdin);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
boat.cpp:41:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
     freopen("A.OUT", "w", stdout);
     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...