QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#425906 | #2836. Permutation Pattern | hos_lyric | AC ✓ | 237ms | 141312kb | C++14 | 2.5kb | 2024-05-30 18:46:24 | 2024-05-30 18:46:24 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
int N;
vector<int> P;
// dp[a][b][c][d]: index [a, b), value [c, d), max = d-1
Int dp[55][55][55][55];
Int DP[55][55][55][55];
int main() {
for (; ~scanf("%d", &N); ) {
P.resize(N);
for (int i = 0; i < N; ++i) {
scanf("%d", &P[i]);
--P[i];
}
vector<int> invP(N, -1);
for (int i = 0; i < N; ++i) invP[P[i]] = i;
for (int a = N; a >= 0; --a) for (int b = a; b <= N; ++b) {
for (int c = N; c >= 0; --c) for (int d = c; d <= N; ++d) {
dp[a][b][c][d] = 0;
DP[a][b][c][d] = 0;
}
}
for (int a = N; a >= 0; --a) for (int b = a; b <= N; ++b) {
for (int c = N; c >= 0; --c) for (int d = c; d <= N; ++d) {
if (c == d) {
dp[a][b][c][d] = 1;
DP[a][b][c][d] = 1;
} else {
const int i = invP[d - 1];
if (a <= i && i < b) {
// (max of [a, i)) = p-1
for (int p = c; p <= d - 1; ++p) {
dp[a][b][c][d] += dp[a][i][c][p] * DP[i + 1][b][p][d - 1];
}
}
DP[a][b][c][d] = DP[a][b][c][d - 1] + dp[a][b][c][d];
}
}
}
const Int ans = DP[0][N][0][N] - 1;
printf("%lld\n", ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 18468kb
input:
2 2 1 3 1 2 3 4 2 3 4 1
output:
3 7 11
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 2ms
memory: 14064kb
input:
1 1 2 1 2 2 2 1 3 1 2 3 3 1 3 2 3 2 1 3 3 2 3 1 3 3 1 2 3 3 2 1
output:
1 3 3 7 7 7 6 7 7
result:
ok 9 lines
Test #3:
score: 0
Accepted
time: 0ms
memory: 18280kb
input:
5 4 5 2 1 3 5 2 5 1 4 3 5 1 2 5 3 4 5 2 4 5 3 1 5 3 4 2 1 5 5 1 3 5 2 4 5 3 4 2 1 5 5 5 1 4 3 2 5 1 5 4 2 3 5 5 2 1 3 4 5 4 5 1 2 3 5 5 2 1 4 3 5 5 3 1 4 2 5 5 1 2 3 4 5 3 2 1 4 5 5 4 3 1 2 5 5 1 3 4 2 5 5 5 4 2 3 1 5 2 4 1 5 3 5 3 5 1 4 2 5 4 2 3 1 5 5 1 5 2 3 4 5 3 2 1 4 5 5 4 5 2 1 3 5 3 2 4 5 1 ...
output:
24 27 31 20 25 27 25 31 31 31 24 31 27 31 31 31 27 27 24 23 27 31 31 24 21 25 21 27 24 25 31 31 25 24 20 31 27 21 21 31 27 31 21 31 21 31 24 22 31 25 25 27 25 27 27 27 31 31 31 22 25 31 27 25 31 22 31 27 25 20 27 22 31 31 25 20 31 31 25 31 27 27 25 20 31 31 31 27 31 31 22 21 25 31 25 27 19 31 27 23
result:
ok 100 lines
Test #4:
score: 0
Accepted
time: 2ms
memory: 18160kb
input:
4 1 2 3 4 4 1 2 4 3 4 1 3 2 4 4 1 3 4 2 4 1 4 2 3 4 1 4 3 2 4 2 1 3 4 4 2 1 4 3 4 2 3 1 4 4 2 3 4 1 4 2 4 1 3 4 2 4 3 1 4 3 1 2 4 4 3 1 4 2 4 3 2 1 4 4 3 2 4 1 4 3 4 1 2 4 3 4 2 1 4 4 1 2 3 4 4 1 3 2 4 4 2 1 3 4 4 2 3 1 4 4 3 1 2 4 4 3 2 1
output:
15 15 15 13 15 15 15 15 13 11 13 12 15 13 15 12 12 12 15 15 15 13 15 15
result:
ok 24 lines
Test #5:
score: 0
Accepted
time: 0ms
memory: 18172kb
input:
5 1 2 3 4 5 5 1 2 3 5 4 5 1 2 4 3 5 5 1 2 4 5 3 5 1 2 5 3 4 5 1 2 5 4 3 5 1 3 2 4 5 5 1 3 2 5 4 5 1 3 4 2 5 5 1 3 4 5 2 5 1 3 5 2 4 5 1 3 5 4 2 5 1 4 2 3 5 5 1 4 2 5 3 5 1 4 3 2 5 5 1 4 3 5 2 5 1 4 5 2 3 5 1 4 5 3 2 5 1 5 2 3 4 5 1 5 2 4 3 5 1 5 3 2 4 5 1 5 3 4 2 5 1 5 4 2 3 5 1 5 4 3 2 5 2 1 3 4 5 ...
output:
31 31 31 27 31 31 31 31 27 23 27 25 31 27 31 25 25 25 31 31 31 27 31 31 31 31 31 27 31 31 27 27 23 20 23 21 27 24 25 21 21 20 27 27 25 22 25 24 31 31 27 23 27 25 31 31 25 21 25 22 25 21 25 20 19 19 25 23 25 21 22 22 31 27 31 25 25 25 31 27 27 22 23 21 31 25 31 24 22 22 24 24 24 21 24 24 31 31 31 27
result:
ok 100 lines
Test #6:
score: 0
Accepted
time: 0ms
memory: 20260kb
input:
5 5 1 4 2 3 5 5 1 4 3 2 5 5 2 1 3 4 5 5 2 1 4 3 5 5 2 3 1 4 5 5 2 3 4 1 5 5 2 4 1 3 5 5 2 4 3 1 5 5 3 1 2 4 5 5 3 1 4 2 5 5 3 2 1 4 5 5 3 2 4 1 5 5 3 4 1 2 5 5 3 4 2 1 5 5 4 1 2 3 5 5 4 1 3 2 5 5 4 2 1 3 5 5 4 2 3 1 5 5 4 3 1 2 5 5 4 3 2 1
output:
31 31 31 31 27 23 27 25 31 27 31 25 25 25 31 31 31 27 31 31
result:
ok 20 lines
Test #7:
score: 0
Accepted
time: 3ms
memory: 20276kb
input:
6 3 4 5 1 6 2 6 3 4 5 6 1 2 6 4 2 5 6 3 1 6 3 5 2 6 4 1 6 3 2 4 1 5 6 6 5 1 4 3 2 6 6 4 6 3 2 1 5 6 3 4 6 5 1 2 6 5 1 2 6 4 3 6 3 5 2 6 1 4 6 6 5 4 1 2 3 6 1 3 2 5 4 6 6 2 3 1 5 4 6 6 1 4 6 3 5 2 6 3 2 4 5 6 1 6 1 2 6 3 4 5 6 5 4 6 1 2 3 6 4 1 2 5 3 6 6 4 1 3 5 2 6 6 6 1 5 2 4 3 6 2 3 1 5 6 4 6 1 4 ...
output:
33 30 33 34 51 63 49 33 51 38 63 63 55 43 38 63 42 55 51 63 48 39 39 51 45 63 46 51 51 63 55 63 42 55 63 45 63 40 47 40 47 51 55 39 51 55 44 49 63 42 63 63 37 36 63 63 39 40 49 63 63 51 51 47 47 45 39 36 63 55 55 63 51 51 37 42 51 55 51 49 39 43 55
result:
ok 83 lines
Test #8:
score: 0
Accepted
time: 0ms
memory: 24596kb
input:
7 2 1 4 3 5 7 6 7 5 4 7 6 3 2 1 7 7 2 5 3 6 4 1 7 6 3 1 5 4 2 7 7 6 5 4 7 2 1 3 7 4 1 7 2 5 3 6 7 5 3 1 6 2 7 4 7 3 7 1 6 5 4 2 7 6 2 1 5 4 3 7 7 4 7 6 3 1 2 5 7 4 6 3 7 1 2 5 7 6 5 2 1 7 3 4 7 4 1 2 6 3 7 5 7 3 1 6 7 5 2 4 7 4 7 3 6 1 5 2 7 3 6 5 4 7 1 2 7 1 7 2 4 3 5 6 7 2 6 1 3 5 7 4 7 1 2 7 4 6 ...
output:
127 64 73 103 78 95 81 89 127 85 66 91 99 79 67 61 127 91 111 83 67 60 127 85 57 66 111 99 111 53 64 99 89 91 73 99 75 83 103 81 72 75 69 99 64 99 91 91 95 85 66 60 79 103 64 64 91 83 67 87 75 91 75 103 95 75 71 54 89 68 65
result:
ok 71 lines
Test #9:
score: 0
Accepted
time: 0ms
memory: 28472kb
input:
8 4 1 2 7 8 5 6 3 8 7 2 8 6 4 5 1 3 8 2 3 4 8 6 5 1 7 8 5 8 3 6 2 1 4 7 8 2 4 3 8 1 7 5 6 8 5 7 8 4 6 3 1 2 8 1 4 2 7 5 3 8 6 8 6 7 8 4 3 1 2 5 8 7 2 5 1 6 4 8 3 8 8 1 4 7 2 5 6 3 8 6 8 7 3 2 1 5 4 8 7 6 8 2 1 3 5 4 8 1 5 6 4 2 7 3 8 8 6 3 2 7 8 4 1 5 8 6 2 3 7 4 5 8 1 8 4 5 7 1 8 3 2 6 8 7 4 1 6 5 ...
output:
143 125 149 143 175 98 183 131 147 167 162 162 159 107 117 102 183 135 129 155 80 191 135 165 155 171 103 255 169 125 111 102 114 90 255 111 107 255 95 139 167 159 171 168 83 191 91 90 165 115 207 109 159 141 223 100 159 97 101 167 103 132
result:
ok 62 lines
Test #10:
score: 0
Accepted
time: 0ms
memory: 30492kb
input:
9 2 3 7 8 9 6 1 5 4 9 1 6 3 4 2 9 8 7 5 9 1 9 2 6 7 3 4 5 8 9 4 2 1 5 6 3 9 7 8 9 5 1 2 4 3 8 6 9 7 9 5 3 6 2 9 8 7 1 4 9 2 1 9 8 5 3 6 4 7 9 5 4 1 7 8 3 9 6 2 9 2 1 9 6 5 4 8 3 7 9 5 3 6 4 9 2 7 1 8 9 3 7 1 4 6 9 8 5 2 9 5 1 9 4 8 7 3 2 6 9 5 8 7 4 9 6 3 2 1 9 5 7 2 1 3 9 4 6 8 9 9 8 5 1 4 6 7 3 2 ...
output:
183 349 399 383 447 176 447 173 399 187 197 255 154 309 271 224 239 177 107 351 183 271 279 161 175 267 263 213 155 319 223 219 215 181 259 271 225 112 337 195 175 199 337 195 279 511 212 182 217 180 353 205 279 271 259
result:
ok 55 lines
Test #11:
score: 0
Accepted
time: 3ms
memory: 30796kb
input:
10 3 8 6 9 7 5 2 1 4 10 10 9 4 6 10 2 5 3 1 8 7 10 7 8 5 10 2 9 3 1 4 6 10 8 6 9 10 7 3 4 5 2 1 10 5 2 4 3 8 6 1 7 9 10 10 1 2 8 4 5 7 10 9 6 3 10 8 3 4 6 5 10 9 7 2 1 10 3 9 10 4 5 1 2 8 6 7 10 4 8 2 3 9 10 5 6 1 7 10 2 3 4 1 8 7 9 5 10 6 10 4 10 6 2 3 1 8 5 7 9 10 8 7 6 2 4 9 10 1 5 3 10 1 9 6 5 1...
output:
355 367 271 213 615 439 267 433 292 455 543 319 331 671 895 279 523 623 291 319 387 513 367 383 1023 424 283 583 341 407 355 291 575 373 316 297 412 603 565 431 575 306 341 267 367 421 300 383 735 511
result:
ok 50 lines
Test #12:
score: 0
Accepted
time: 0ms
memory: 32648kb
input:
2 2 1 8 3 8 1 6 2 7 4 5 2 2 1 3 2 1 3 6 3 4 6 5 1 2 1 1 4 2 4 3 1 1 1 6 1 3 4 2 6 5 9 5 8 9 2 1 3 7 4 6 2 1 2 9 4 3 7 9 1 2 5 6 8 6 4 6 1 5 3 2 4 3 1 4 2 6 2 1 3 6 4 5 2 1 2 2 1 2 7 4 7 2 3 5 1 6 2 2 1 1 1 7 2 7 6 5 1 4 3 2 2 1 4 3 1 2 4 8 7 8 2 6 5 1 4 3 9 4 5 1 2 6 3 7 9 8 10 1 3 2 9 5 7 8 10 6 4 ...
output:
3 158 3 7 33 1 12 1 55 249 3 247 43 13 63 3 3 73 3 1 99 3 15 156 335 495 53 15 135 7 3 318 7 1 27 135 1 287 138 205 1 103 895 15 15 27 175 75 73 175
result:
ok 50 lines
Test #13:
score: 0
Accepted
time: 205ms
memory: 121008kb
input:
50 3 50 12 35 11 7 17 49 1 9 41 5 4 27 6 22 8 20 44 43 10 13 15 42 38 16 18 19 30 2 23 21 34 24 32 25 45 39 40 48 26 28 37 36 33 31 29 47 46 14 50 41 21 40 37 36 31 30 3 2 1 34 27 8 4 5 9 28 17 10 11 7 12 15 38 13 14 6 18 20 25 24 16 22 29 26 35 32 33 46 45 50 42 47 48 49 23 43 39 44 19 50 41 38 23 ...
output:
71786596197 925094043175 15360313400319 83273752556543 599976015791 6320724096624 5783738400607 487480246255 307563605 419463685996543
result:
ok 10 lines
Test #14:
score: 0
Accepted
time: 237ms
memory: 122992kb
input:
50 34 20 49 44 4 16 7 24 26 46 31 12 22 47 17 21 29 14 23 9 11 2 30 33 18 8 19 13 38 15 39 28 48 27 35 3 40 42 37 6 25 32 43 10 45 1 50 41 5 36 50 2 29 24 7 1 3 8 4 12 5 6 10 9 26 11 23 13 44 14 16 41 37 15 19 20 34 33 32 21 45 40 22 17 28 25 27 18 30 31 35 38 36 39 43 42 50 46 49 47 48 50 28 19 18 ...
output:
469303887 3708187017215 320672525975551 2384027442511 7802888619 54571757666 12111593784831 124903382056959 22915448657023 181636580245503
result:
ok 10 lines
Test #15:
score: 0
Accepted
time: 182ms
memory: 139424kb
input:
50 1 2 3 16 5 4 6 12 10 9 8 7 11 14 13 15 42 41 40 21 17 19 18 20 26 25 22 24 23 28 27 39 29 36 32 31 30 33 35 34 38 37 43 45 44 50 46 47 48 49 50 24 30 13 12 44 9 8 6 26 1 5 3 10 11 23 15 14 16 18 17 21 19 22 37 25 33 27 2 32 31 28 29 40 36 20 34 50 47 41 4 38 42 43 46 45 48 39 35 7 49 50 45 44 25 ...
output:
1125899906842623 1973544596971 20464777601 145970369134591 1125899906842623 27103062537 492677980225535 611302507087 9436138365023 16901739359823
result:
ok 10 lines
Test #16:
score: 0
Accepted
time: 181ms
memory: 141312kb
input:
50 16 15 13 12 11 4 3 2 1 5 10 30 27 8 6 7 9 22 38 20 19 14 17 37 31 29 23 21 26 24 25 33 32 36 34 39 41 28 40 45 44 43 35 18 42 46 48 47 49 50 50 49 48 43 42 41 24 23 22 29 5 39 3 2 1 4 21 19 8 33 7 9 10 17 12 11 14 13 15 6 16 18 20 40 26 25 37 31 30 28 27 35 34 32 36 38 47 44 46 45 50 50 26 25 24 ...
output:
16941091848191 76454653671423 1125899906842623 281482263953919 1853535582743 11131049930979 914793674309631 109343881936895 323479068999679 226499395534975
result:
ok 10 lines
Test #17:
score: 0
Accepted
time: 178ms
memory: 138360kb
input:
50 48 47 46 45 44 30 35 24 3 16 12 10 4 2 1 9 8 7 6 15 13 14 31 28 27 18 19 20 17 11 25 21 26 5 23 43 29 34 32 33 37 38 36 39 40 22 42 41 49 50 50 50 13 47 44 43 49 42 34 32 31 30 28 27 26 25 14 9 8 7 5 24 3 1 4 12 6 10 2 16 15 11 21 20 18 17 19 22 23 29 33 35 37 36 39 38 40 41 46 45 48 50 46 43 25 ...
output:
13401186994175 58470124486783 3963515139491 18417882639247 1483926119947 74820097933311 76869894769151 138492980779 86510044435583 986103193471
result:
ok 10 lines
Test #18:
score: 0
Accepted
time: 180ms
memory: 138260kb
input:
50 50 49 48 47 45 42 41 40 39 38 18 17 16 1 15 14 5 4 2 3 7 6 8 13 11 10 9 12 32 27 26 25 24 19 20 23 21 22 28 29 31 30 37 33 36 35 34 43 44 46 50 3 1 2 5 4 11 6 33 43 19 8 21 18 17 9 13 10 34 12 15 16 20 31 29 22 24 25 26 28 7 30 42 41 32 35 38 27 37 36 40 39 44 45 23 46 49 48 47 14 50 50 46 45 44 ...
output:
1125899906842623 11503392639871 268613428707327 15555678637567 9233630159167 22814306219679 170131707658239 633318697600255 774159265169407 143738636705815
result:
ok 10 lines
Test #19:
score: 0
Accepted
time: 185ms
memory: 139472kb
input:
50 33 30 29 39 28 50 27 24 23 22 21 20 19 18 15 4 7 2 3 25 5 8 1 6 14 11 9 10 32 12 13 16 17 26 31 37 34 35 36 40 38 41 42 43 45 44 46 49 47 48 50 37 36 32 25 22 21 20 19 12 9 7 3 2 1 4 5 6 8 10 11 18 17 15 13 14 16 24 23 26 27 29 28 30 31 35 34 33 38 39 40 41 46 42 44 43 45 50 47 48 49 50 8 7 6 5 1...
output:
38933422040063 1125899906842623 562950014763007 44651459044351 26429508299007 22574688062335 50191439772447 48552580405247 976228746199 286807572873215
result:
ok 10 lines
Test #20:
score: 0
Accepted
time: 178ms
memory: 138244kb
input:
50 2 12 3 6 5 4 11 8 10 39 9 15 13 14 25 34 31 38 32 29 19 17 16 18 28 7 27 20 22 21 23 26 24 30 40 37 35 41 33 1 49 43 42 36 48 47 44 45 46 50 50 49 45 43 39 24 38 28 27 25 23 22 20 19 18 3 2 1 17 6 13 4 15 14 29 11 7 8 12 21 37 36 35 26 9 34 32 44 31 30 33 10 42 41 16 40 48 46 47 50 5 50 6 5 4 3 2...
output:
17351472343295 4556477881839 2463120461823 10732306780233 1125899906842623 1125899906842623 914793674309631 360661339078655 56122596884479 1125899906842623
result:
ok 10 lines
Test #21:
score: 0
Accepted
time: 191ms
memory: 138560kb
input:
50 13 11 10 7 12 6 5 2 1 3 4 9 8 14 15 16 18 17 20 19 26 22 21 25 24 23 27 28 29 30 32 31 35 34 33 36 40 39 37 38 41 42 44 43 46 45 47 48 49 50 50 33 5 4 3 2 1 31 27 10 9 6 8 7 25 24 12 15 13 14 23 22 20 19 16 18 17 21 26 29 28 30 32 34 43 37 39 35 36 38 42 40 11 41 44 46 45 47 48 50 49 50 12 9 4 2 ...
output:
636067476668415 457397606285311 562949953748991 193106020401151 156758753177599 562950161039359 1125899906842623 174067508416955 12327032671235 130364051111935
result:
ok 10 lines
Test #22:
score: 0
Accepted
time: 172ms
memory: 138328kb
input:
50 23 22 21 20 30 19 18 17 6 24 5 1 2 3 4 7 8 15 9 27 10 14 12 11 13 16 28 26 34 41 32 31 29 35 33 40 39 36 37 38 42 49 47 25 43 44 46 45 48 50 50 44 40 39 29 45 20 6 16 1 2 4 3 5 18 11 7 8 10 9 15 13 12 14 17 19 25 21 22 23 35 24 26 28 27 30 37 36 34 32 31 33 38 41 42 46 43 49 48 47 50 50 22 21 18 ...
output:
52374859921919 183793727635071 1125899906842623 164982120296479 291112892864703 84576527974399 149606796066815 1125899906842623 1125899906842623 26141702275847
result:
ok 10 lines
Test #23:
score: 0
Accepted
time: 199ms
memory: 139452kb
input:
50 19 27 40 18 49 41 4 42 23 44 13 12 6 14 20 17 28 35 43 21 15 29 34 2 38 48 10 9 32 31 22 11 3 50 36 45 8 25 30 37 1 5 24 16 26 7 33 39 46 47 50 12 26 47 33 38 49 1 20 39 17 42 18 37 6 30 19 22 23 5 31 45 41 9 16 34 10 7 35 46 50 2 24 11 40 4 32 27 13 48 14 36 3 43 44 8 25 28 21 29 15 50 22 32 36 ...
output:
247169890 56493847 155005117 61848536 421559517 201522429 133241515 63264935 97358485 652628926
result:
ok 10 lines
Test #24:
score: 0
Accepted
time: 12ms
memory: 138576kb
input:
50 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
output:
1125899906842623
result:
ok single line: '1125899906842623'