# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
465071 | 2021-08-15T06:51:30 Z | arminatarod | Boat (APIO16_boat) | C++17 | 1851 ms | 8352 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; } d[i][j] %= 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 } dp[i][j] %= mod; } } 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
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 998 ms | 8160 KB | Output is correct |
2 | Correct | 1018 ms | 8148 KB | Output is correct |
3 | Correct | 984 ms | 8196 KB | Output is correct |
4 | Correct | 991 ms | 8180 KB | Output is correct |
5 | Correct | 991 ms | 8140 KB | Output is correct |
6 | Correct | 892 ms | 8176 KB | Output is correct |
7 | Correct | 895 ms | 8104 KB | Output is correct |
8 | Correct | 900 ms | 8224 KB | Output is correct |
9 | Correct | 906 ms | 8208 KB | Output is correct |
10 | Correct | 901 ms | 8296 KB | Output is correct |
11 | Correct | 899 ms | 8152 KB | Output is correct |
12 | Correct | 900 ms | 8144 KB | Output is correct |
13 | Correct | 896 ms | 8224 KB | Output is correct |
14 | Correct | 889 ms | 8268 KB | Output is correct |
15 | Correct | 896 ms | 8184 KB | Output is correct |
16 | Correct | 179 ms | 3592 KB | Output is correct |
17 | Correct | 195 ms | 3776 KB | Output is correct |
18 | Correct | 186 ms | 3692 KB | Output is correct |
19 | Correct | 194 ms | 3736 KB | Output is correct |
20 | Correct | 199 ms | 3680 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 998 ms | 8160 KB | Output is correct |
2 | Correct | 1018 ms | 8148 KB | Output is correct |
3 | Correct | 984 ms | 8196 KB | Output is correct |
4 | Correct | 991 ms | 8180 KB | Output is correct |
5 | Correct | 991 ms | 8140 KB | Output is correct |
6 | Correct | 892 ms | 8176 KB | Output is correct |
7 | Correct | 895 ms | 8104 KB | Output is correct |
8 | Correct | 900 ms | 8224 KB | Output is correct |
9 | Correct | 906 ms | 8208 KB | Output is correct |
10 | Correct | 901 ms | 8296 KB | Output is correct |
11 | Correct | 899 ms | 8152 KB | Output is correct |
12 | Correct | 900 ms | 8144 KB | Output is correct |
13 | Correct | 896 ms | 8224 KB | Output is correct |
14 | Correct | 889 ms | 8268 KB | Output is correct |
15 | Correct | 896 ms | 8184 KB | Output is correct |
16 | Correct | 179 ms | 3592 KB | Output is correct |
17 | Correct | 195 ms | 3776 KB | Output is correct |
18 | Correct | 186 ms | 3692 KB | Output is correct |
19 | Correct | 194 ms | 3736 KB | Output is correct |
20 | Correct | 199 ms | 3680 KB | Output is correct |
21 | Correct | 340 ms | 7856 KB | Output is correct |
22 | Correct | 353 ms | 7844 KB | Output is correct |
23 | Correct | 327 ms | 7800 KB | Output is correct |
24 | Correct | 332 ms | 7748 KB | Output is correct |
25 | Correct | 341 ms | 7792 KB | Output is correct |
26 | Correct | 296 ms | 7620 KB | Output is correct |
27 | Correct | 310 ms | 7736 KB | Output is correct |
28 | Correct | 297 ms | 7676 KB | Output is correct |
29 | Correct | 308 ms | 7688 KB | Output is correct |
30 | Correct | 867 ms | 8156 KB | Output is correct |
31 | Correct | 856 ms | 8132 KB | Output is correct |
32 | Correct | 865 ms | 8260 KB | Output is correct |
33 | Correct | 864 ms | 8128 KB | Output is correct |
34 | Correct | 853 ms | 8220 KB | Output is correct |
35 | Correct | 972 ms | 8220 KB | Output is correct |
36 | Correct | 977 ms | 8084 KB | Output is correct |
37 | Correct | 973 ms | 8116 KB | Output is correct |
38 | Correct | 961 ms | 8232 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 16 ms | 1612 KB | Output is correct |
2 | Correct | 15 ms | 1652 KB | Output is correct |
3 | Correct | 16 ms | 1616 KB | Output is correct |
4 | Correct | 15 ms | 1600 KB | Output is correct |
5 | Correct | 16 ms | 1660 KB | Output is correct |
6 | Correct | 16 ms | 1576 KB | Output is correct |
7 | Correct | 16 ms | 1640 KB | Output is correct |
8 | Correct | 17 ms | 1656 KB | Output is correct |
9 | Correct | 16 ms | 1612 KB | Output is correct |
10 | Correct | 16 ms | 1612 KB | Output is correct |
11 | Correct | 16 ms | 1612 KB | Output is correct |
12 | Correct | 17 ms | 1560 KB | Output is correct |
13 | Correct | 16 ms | 1636 KB | Output is correct |
14 | Correct | 15 ms | 1672 KB | Output is correct |
15 | Correct | 15 ms | 1612 KB | Output is correct |
16 | Correct | 8 ms | 1228 KB | Output is correct |
17 | Correct | 8 ms | 1228 KB | Output is correct |
18 | Correct | 7 ms | 1228 KB | Output is correct |
19 | Correct | 8 ms | 1228 KB | Output is correct |
20 | Correct | 8 ms | 1224 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 998 ms | 8160 KB | Output is correct |
2 | Correct | 1018 ms | 8148 KB | Output is correct |
3 | Correct | 984 ms | 8196 KB | Output is correct |
4 | Correct | 991 ms | 8180 KB | Output is correct |
5 | Correct | 991 ms | 8140 KB | Output is correct |
6 | Correct | 892 ms | 8176 KB | Output is correct |
7 | Correct | 895 ms | 8104 KB | Output is correct |
8 | Correct | 900 ms | 8224 KB | Output is correct |
9 | Correct | 906 ms | 8208 KB | Output is correct |
10 | Correct | 901 ms | 8296 KB | Output is correct |
11 | Correct | 899 ms | 8152 KB | Output is correct |
12 | Correct | 900 ms | 8144 KB | Output is correct |
13 | Correct | 896 ms | 8224 KB | Output is correct |
14 | Correct | 889 ms | 8268 KB | Output is correct |
15 | Correct | 896 ms | 8184 KB | Output is correct |
16 | Correct | 179 ms | 3592 KB | Output is correct |
17 | Correct | 195 ms | 3776 KB | Output is correct |
18 | Correct | 186 ms | 3692 KB | Output is correct |
19 | Correct | 194 ms | 3736 KB | Output is correct |
20 | Correct | 199 ms | 3680 KB | Output is correct |
21 | Correct | 340 ms | 7856 KB | Output is correct |
22 | Correct | 353 ms | 7844 KB | Output is correct |
23 | Correct | 327 ms | 7800 KB | Output is correct |
24 | Correct | 332 ms | 7748 KB | Output is correct |
25 | Correct | 341 ms | 7792 KB | Output is correct |
26 | Correct | 296 ms | 7620 KB | Output is correct |
27 | Correct | 310 ms | 7736 KB | Output is correct |
28 | Correct | 297 ms | 7676 KB | Output is correct |
29 | Correct | 308 ms | 7688 KB | Output is correct |
30 | Correct | 867 ms | 8156 KB | Output is correct |
31 | Correct | 856 ms | 8132 KB | Output is correct |
32 | Correct | 865 ms | 8260 KB | Output is correct |
33 | Correct | 864 ms | 8128 KB | Output is correct |
34 | Correct | 853 ms | 8220 KB | Output is correct |
35 | Correct | 972 ms | 8220 KB | Output is correct |
36 | Correct | 977 ms | 8084 KB | Output is correct |
37 | Correct | 973 ms | 8116 KB | Output is correct |
38 | Correct | 961 ms | 8232 KB | Output is correct |
39 | Correct | 16 ms | 1612 KB | Output is correct |
40 | Correct | 15 ms | 1652 KB | Output is correct |
41 | Correct | 16 ms | 1616 KB | Output is correct |
42 | Correct | 15 ms | 1600 KB | Output is correct |
43 | Correct | 16 ms | 1660 KB | Output is correct |
44 | Correct | 16 ms | 1576 KB | Output is correct |
45 | Correct | 16 ms | 1640 KB | Output is correct |
46 | Correct | 17 ms | 1656 KB | Output is correct |
47 | Correct | 16 ms | 1612 KB | Output is correct |
48 | Correct | 16 ms | 1612 KB | Output is correct |
49 | Correct | 16 ms | 1612 KB | Output is correct |
50 | Correct | 17 ms | 1560 KB | Output is correct |
51 | Correct | 16 ms | 1636 KB | Output is correct |
52 | Correct | 15 ms | 1672 KB | Output is correct |
53 | Correct | 15 ms | 1612 KB | Output is correct |
54 | Correct | 8 ms | 1228 KB | Output is correct |
55 | Correct | 8 ms | 1228 KB | Output is correct |
56 | Correct | 7 ms | 1228 KB | Output is correct |
57 | Correct | 8 ms | 1228 KB | Output is correct |
58 | Correct | 8 ms | 1224 KB | Output is correct |
59 | Correct | 1851 ms | 8224 KB | Output is correct |
60 | Correct | 1794 ms | 8180 KB | Output is correct |
61 | Correct | 1776 ms | 8156 KB | Output is correct |
62 | Correct | 1813 ms | 8276 KB | Output is correct |
63 | Correct | 1821 ms | 8352 KB | Output is correct |
64 | Correct | 1799 ms | 8264 KB | Output is correct |
65 | Correct | 1770 ms | 8216 KB | Output is correct |
66 | Correct | 1794 ms | 8252 KB | Output is correct |
67 | Correct | 1758 ms | 8300 KB | Output is correct |
68 | Correct | 1790 ms | 8252 KB | Output is correct |
69 | Correct | 1779 ms | 8288 KB | Output is correct |
70 | Correct | 1778 ms | 8284 KB | Output is correct |
71 | Correct | 1772 ms | 8252 KB | Output is correct |
72 | Correct | 1784 ms | 8340 KB | Output is correct |
73 | Correct | 1796 ms | 8224 KB | Output is correct |
74 | Correct | 227 ms | 3700 KB | Output is correct |
75 | Correct | 227 ms | 3676 KB | Output is correct |
76 | Correct | 224 ms | 3752 KB | Output is correct |
77 | Correct | 245 ms | 3704 KB | Output is correct |
78 | Correct | 226 ms | 3676 KB | Output is correct |