# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
434957 | 2021-06-22T14:16:27 Z | Lam_lai_cuoc_doi | Boat (APIO16_boat) | C++17 | 2000 ms | 8288 KB |
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; using ull = unsigned long long; constexpr bool typetest = 0; constexpr int N = 5e2 + 2; constexpr ll mod = 1e9 + 7; /* https://codeforces.com/blog/entry/57324?#comment-409800 */ int n; /// dp[i][j]: choose i first elements in j first blocks ll dp[N][N * 2], d[N * 2][N], inv[N]; pair<int, int> s[N]; vector<int> block; void Read() { scanf("%d", &n); //cin >> n; block.reserve(n * 2); for (int i = 1; i <= n; ++i) { //cin >> s[i].first >> s[i].second; scanf("%d%d", &s[i].first, &s[i].second); block.emplace_back(s[i].first - 1); block.emplace_back(s[i].second); } sort(block.begin(), block.end()); block.resize(unique(block.begin(), block.end()) - block.begin()); } ll Pow(ll a, ll b) { ll ans(1); for (; b > 0; b >>= 1) { if (b & 1) ans = ans * a % mod; a = a * a % mod; } return ans; } void Solve() { inv[0] = 1; for (int i = 1; i <= n; ++i) inv[i] = inv[i - 1] * i % mod; ll tmp = Pow(inv[n], mod - 2); for (int i = n; i; --i) { inv[i] = tmp * inv[i - 1] % mod; (tmp *= i) %= mod; } /// Pre-calculate d[], I'll define d[] below for (int i = 1; i < (int)block.size(); ++i) { d[i][0] = 1; for (int j = 1; j <= n; ++j) { ll c1(1), c2(1); for (int t = 0; t < j && t + 1 <= block[i] - block[i - 1]; ++t) { (c2 *= inv[t + 1] * (block[i] - block[i - 1] - (t + 1) + 1) % mod) %= mod; (d[i][j] += c1 * c2) %= mod; (c1 *= inv[t + 1] * (j - 1 - (t + 1) + 1) % mod) %= mod; } } } for (int i = 0; i < (int)block.size(); ++i) dp[0][i] = 1; for (int i = 1; i <= n; ++i) { dp[i][0] = 1; for (int j = 1; j < (int)block.size(); ++j) { /// no element in j block dp[i][j] = dp[i][j - 1]; /// there're some elements in j block for (int t = i, cnt(0); t; --t) if (s[t].first <= block[j - 1] + 1 && s[t].second >= block[j]) { ++cnt; (dp[i][j] += dp[t - 1][j - 1] * d[j][cnt]) %= mod; /// d[j][i] : number of ways to make array that have less or equal i element only from block j /// to prevent overlap counting, we need to change sthg about definition } } } cout << dp[n][block.size() - 1] - 1; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t(1); if (typetest) cin >> t; for (int _ = 1; _ <= t; ++_) { Read(); Solve(); } }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1079 ms | 8176 KB | Output is correct |
2 | Correct | 1063 ms | 8216 KB | Output is correct |
3 | Correct | 1057 ms | 8148 KB | Output is correct |
4 | Correct | 1068 ms | 8148 KB | Output is correct |
5 | Correct | 1116 ms | 8288 KB | Output is correct |
6 | Correct | 912 ms | 8284 KB | Output is correct |
7 | Correct | 900 ms | 8156 KB | Output is correct |
8 | Correct | 937 ms | 8108 KB | Output is correct |
9 | Correct | 968 ms | 8120 KB | Output is correct |
10 | Correct | 970 ms | 8188 KB | Output is correct |
11 | Correct | 970 ms | 8272 KB | Output is correct |
12 | Correct | 970 ms | 8140 KB | Output is correct |
13 | Correct | 994 ms | 8188 KB | Output is correct |
14 | Correct | 929 ms | 8216 KB | Output is correct |
15 | Correct | 989 ms | 8212 KB | Output is correct |
16 | Correct | 193 ms | 3576 KB | Output is correct |
17 | Correct | 196 ms | 3704 KB | Output is correct |
18 | Correct | 204 ms | 3696 KB | Output is correct |
19 | Correct | 205 ms | 3712 KB | Output is correct |
20 | Correct | 220 ms | 3764 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1079 ms | 8176 KB | Output is correct |
2 | Correct | 1063 ms | 8216 KB | Output is correct |
3 | Correct | 1057 ms | 8148 KB | Output is correct |
4 | Correct | 1068 ms | 8148 KB | Output is correct |
5 | Correct | 1116 ms | 8288 KB | Output is correct |
6 | Correct | 912 ms | 8284 KB | Output is correct |
7 | Correct | 900 ms | 8156 KB | Output is correct |
8 | Correct | 937 ms | 8108 KB | Output is correct |
9 | Correct | 968 ms | 8120 KB | Output is correct |
10 | Correct | 970 ms | 8188 KB | Output is correct |
11 | Correct | 970 ms | 8272 KB | Output is correct |
12 | Correct | 970 ms | 8140 KB | Output is correct |
13 | Correct | 994 ms | 8188 KB | Output is correct |
14 | Correct | 929 ms | 8216 KB | Output is correct |
15 | Correct | 989 ms | 8212 KB | Output is correct |
16 | Correct | 193 ms | 3576 KB | Output is correct |
17 | Correct | 196 ms | 3704 KB | Output is correct |
18 | Correct | 204 ms | 3696 KB | Output is correct |
19 | Correct | 205 ms | 3712 KB | Output is correct |
20 | Correct | 220 ms | 3764 KB | Output is correct |
21 | Correct | 455 ms | 7868 KB | Output is correct |
22 | Correct | 437 ms | 7872 KB | Output is correct |
23 | Correct | 457 ms | 7828 KB | Output is correct |
24 | Correct | 438 ms | 7748 KB | Output is correct |
25 | Correct | 492 ms | 7692 KB | Output is correct |
26 | Correct | 527 ms | 7700 KB | Output is correct |
27 | Correct | 630 ms | 7748 KB | Output is correct |
28 | Correct | 556 ms | 7680 KB | Output is correct |
29 | Correct | 551 ms | 7688 KB | Output is correct |
30 | Correct | 919 ms | 8116 KB | Output is correct |
31 | Correct | 964 ms | 8084 KB | Output is correct |
32 | Correct | 909 ms | 8132 KB | Output is correct |
33 | Correct | 867 ms | 8136 KB | Output is correct |
34 | Correct | 865 ms | 8136 KB | Output is correct |
35 | Correct | 983 ms | 8168 KB | Output is correct |
36 | Correct | 992 ms | 8184 KB | Output is correct |
37 | Correct | 1002 ms | 8080 KB | Output is correct |
38 | Correct | 987 ms | 8204 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 19 ms | 1612 KB | Output is correct |
2 | Correct | 17 ms | 1628 KB | Output is correct |
3 | Correct | 18 ms | 1592 KB | Output is correct |
4 | Correct | 17 ms | 1588 KB | Output is correct |
5 | Correct | 17 ms | 1612 KB | Output is correct |
6 | Correct | 18 ms | 1556 KB | Output is correct |
7 | Correct | 19 ms | 1604 KB | Output is correct |
8 | Correct | 18 ms | 1612 KB | Output is correct |
9 | Correct | 17 ms | 1612 KB | Output is correct |
10 | Correct | 21 ms | 1672 KB | Output is correct |
11 | Correct | 20 ms | 1612 KB | Output is correct |
12 | Correct | 16 ms | 1660 KB | Output is correct |
13 | Correct | 19 ms | 1584 KB | Output is correct |
14 | Correct | 17 ms | 1624 KB | Output is correct |
15 | Correct | 17 ms | 1616 KB | Output is correct |
16 | Correct | 8 ms | 1228 KB | Output is correct |
17 | Correct | 8 ms | 1228 KB | Output is correct |
18 | Correct | 8 ms | 1244 KB | Output is correct |
19 | Correct | 9 ms | 1228 KB | Output is correct |
20 | Correct | 10 ms | 1172 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1079 ms | 8176 KB | Output is correct |
2 | Correct | 1063 ms | 8216 KB | Output is correct |
3 | Correct | 1057 ms | 8148 KB | Output is correct |
4 | Correct | 1068 ms | 8148 KB | Output is correct |
5 | Correct | 1116 ms | 8288 KB | Output is correct |
6 | Correct | 912 ms | 8284 KB | Output is correct |
7 | Correct | 900 ms | 8156 KB | Output is correct |
8 | Correct | 937 ms | 8108 KB | Output is correct |
9 | Correct | 968 ms | 8120 KB | Output is correct |
10 | Correct | 970 ms | 8188 KB | Output is correct |
11 | Correct | 970 ms | 8272 KB | Output is correct |
12 | Correct | 970 ms | 8140 KB | Output is correct |
13 | Correct | 994 ms | 8188 KB | Output is correct |
14 | Correct | 929 ms | 8216 KB | Output is correct |
15 | Correct | 989 ms | 8212 KB | Output is correct |
16 | Correct | 193 ms | 3576 KB | Output is correct |
17 | Correct | 196 ms | 3704 KB | Output is correct |
18 | Correct | 204 ms | 3696 KB | Output is correct |
19 | Correct | 205 ms | 3712 KB | Output is correct |
20 | Correct | 220 ms | 3764 KB | Output is correct |
21 | Correct | 455 ms | 7868 KB | Output is correct |
22 | Correct | 437 ms | 7872 KB | Output is correct |
23 | Correct | 457 ms | 7828 KB | Output is correct |
24 | Correct | 438 ms | 7748 KB | Output is correct |
25 | Correct | 492 ms | 7692 KB | Output is correct |
26 | Correct | 527 ms | 7700 KB | Output is correct |
27 | Correct | 630 ms | 7748 KB | Output is correct |
28 | Correct | 556 ms | 7680 KB | Output is correct |
29 | Correct | 551 ms | 7688 KB | Output is correct |
30 | Correct | 919 ms | 8116 KB | Output is correct |
31 | Correct | 964 ms | 8084 KB | Output is correct |
32 | Correct | 909 ms | 8132 KB | Output is correct |
33 | Correct | 867 ms | 8136 KB | Output is correct |
34 | Correct | 865 ms | 8136 KB | Output is correct |
35 | Correct | 983 ms | 8168 KB | Output is correct |
36 | Correct | 992 ms | 8184 KB | Output is correct |
37 | Correct | 1002 ms | 8080 KB | Output is correct |
38 | Correct | 987 ms | 8204 KB | Output is correct |
39 | Correct | 19 ms | 1612 KB | Output is correct |
40 | Correct | 17 ms | 1628 KB | Output is correct |
41 | Correct | 18 ms | 1592 KB | Output is correct |
42 | Correct | 17 ms | 1588 KB | Output is correct |
43 | Correct | 17 ms | 1612 KB | Output is correct |
44 | Correct | 18 ms | 1556 KB | Output is correct |
45 | Correct | 19 ms | 1604 KB | Output is correct |
46 | Correct | 18 ms | 1612 KB | Output is correct |
47 | Correct | 17 ms | 1612 KB | Output is correct |
48 | Correct | 21 ms | 1672 KB | Output is correct |
49 | Correct | 20 ms | 1612 KB | Output is correct |
50 | Correct | 16 ms | 1660 KB | Output is correct |
51 | Correct | 19 ms | 1584 KB | Output is correct |
52 | Correct | 17 ms | 1624 KB | Output is correct |
53 | Correct | 17 ms | 1616 KB | Output is correct |
54 | Correct | 8 ms | 1228 KB | Output is correct |
55 | Correct | 8 ms | 1228 KB | Output is correct |
56 | Correct | 8 ms | 1244 KB | Output is correct |
57 | Correct | 9 ms | 1228 KB | Output is correct |
58 | Correct | 10 ms | 1172 KB | Output is correct |
59 | Correct | 1891 ms | 8156 KB | Output is correct |
60 | Correct | 1907 ms | 8156 KB | Output is correct |
61 | Correct | 1908 ms | 8164 KB | Output is correct |
62 | Correct | 1935 ms | 8120 KB | Output is correct |
63 | Correct | 1903 ms | 8140 KB | Output is correct |
64 | Execution timed out | 2060 ms | 8192 KB | Time limit exceeded |
65 | Halted | 0 ms | 0 KB | - |