QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#712563 | #2472. Counting Haybales | _8_8_# | 14.285714 | 1475ms | 132200kb | C++23 | 2.7kb | 2024-11-05 16:10:38 | 2024-11-05 16:10:40 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e3 + 2, MOD = (int)1e9 + 7;
int n, h[N], k;
void add(int &x, int y) {
x += y;
if(x >= MOD) x -= MOD;
}
int dp[N];
map<pair<int, int> , int> pd[N];
void make() {
for(int i = 1; i <= n; i++) {
int l, r, f;
l = r = h[i];
f = i;
for(int j = i + 1; j <= n; j++) {
if(h[j] < h[f]) {
if(abs(l - h[j]) <= 1 && abs(r - h[j]) <= 1) {
f = j;
}
}
l = min(l, h[j]);
r = max(r, h[j]);
}
while(f != i) {
swap(h[f], h[f - 1]);
--f;
}
}
}
int cl[N];
void test() {
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> h[i];
if(h[i] == h[i - 1]) {
cl[i] = cl[i - 1] + 1;
} else {
cl[i] = 1;
}
}
make();
for(int i = 1; i <= n; i++) {
pd[i].clear();
}
dp[0] = 1;
for(int i = 1; i <= n; i++) {
if(i == 1) pd[i][{1, h[i]}] = dp[i - 1];
else {
for(int j = h[i - 1] - 1; j <= h[i - 1] + 1; j++) {
if(j != h[i]) {
for(int f = 1; f <= i; f++) {
add(pd[i][{1, h[i]}], pd[i - 1][{f, j}]);
}
}
}
}
int s = 0, s1 = 0;
for(int j = i; j >= 1; j--) {
int val = pd[i - 1][{j, h[i] - 1}], val1 = pd[i - 1][{j, h[i] + 1}];
if(h[i - 1] == h[i] - 1 && cl[i - 1] >= j) {
for(int f = 1; f <= i; f++) {
add(s, pd[i - 1 - j][{f, h[i] + 1}] * 1ll * f % MOD);
}
}
if(h[i - 1] == h[i] + 1 && cl[i - 1] >= j) {
for(int f = 1; f <= i; f++) {
add(s1, pd[i - 1 - j][{f, h[i] - 1}] * 1ll * f % MOD);
}
}
add(s, val);
add(s1, val1);
pd[i][{j, h[i] - 1}] = s;
pd[i][{j, h[i] + 1}] = s1;
if(j > 1) {
pd[i][{j, h[i]}] = pd[i - 1][{j - 1, h[i]}];
}
}
int j = i - 1;
dp[i] = dp[i - 1];
for(; j >= 1 && abs(h[j] - h[i]) == 1; j--) {
add(dp[i], dp[j - 1]);
}
for(int f = 1; f <= i; f++) {
add(dp[i], f * 1ll * pd[j][{f, h[i] - 1}] % MOD);
add(dp[i], f * 1ll * pd[j][{f, h[i] + 1}] % MOD);
}
}
cout << dp[n] << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t = 1;
cin >> t;
while(t--) {
test();
}
}
詳細信息
Pretests
Final Tests
Test #1:
score: 4.7619
Accepted
time: 1ms
memory: 3964kb
input:
7 4 2 2 2 3 4 3 3 1 2 4 5 3 4 2 6 3 3 1 1 2 2 6 1 3 3 4 1 2 6 4 1 2 3 5 4 10 1 5 6 6 6 4 2 3 2 5
output:
4 4 5 15 9 8 19
result:
ok 7 lines
Test #2:
score: 0
Wrong Answer
time: 1ms
memory: 3912kb
input:
10 10 447773962 773442532 122816 137572579 324627123 157577940 253498609 99147813 425825313 199995380 10 416515986 416515986 416515987 416515987 416515988 416515988 416515989 416515989 416515988 416515989 10 563229302 563229301 563229301 563229302 563229301 563229300 563229300 563229301 563229302 56...
output:
1 186 210 133 150 113 147 231 110 98
result:
wrong answer 6th lines differ - expected: '133', found: '113'
Test #3:
score: 0
Wrong Answer
time: 1ms
memory: 3908kb
input:
10 10 468145963 198730372 27838076 590195590 467423861 520495379 451366491 344173378 354694313 165814381 10 219739800 219739801 219739801 219739800 219739799 219739799 219739798 219739798 219739798 219739799 10 568161994 568161995 568161994 568161994 568161994 568161994 568161993 568161994 568161995...
output:
1 124 120 120 51 108 252 100 252 231
result:
wrong answer 2nd lines differ - expected: '186', found: '124'
Test #4:
score: 0
Time Limit Exceeded
input:
1 5000 2 1 3 3 1 1 2 2 3 2 3 1 1 1 1 1 1 1 2 3 1 1 2 2 2 1 1 2 3 2 2 3 1 3 2 3 1 2 2 2 1 1 3 2 2 1 1 2 2 3 3 3 1 1 1 3 2 3 3 1 3 1 3 1 3 3 3 2 2 2 1 2 2 3 2 3 2 1 1 1 2 2 2 3 1 2 1 1 2 2 3 2 2 3 1 3 1 2 2 1 1 3 1 1 2 3 1 3 2 2 2 2 3 2 3 2 3 3 3 1 2 3 3 2 2 2 2 3 1 2 2 1 1 1 1 3 3 1 1 1 3 2 2 1 3 2 2...
output:
result:
Test #5:
score: 4.7619
Accepted
time: 1017ms
memory: 43108kb
input:
10 500 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1...
output:
523068127 490281121 335146668 378222245 662250428 677229935 432072782 2379013 65560564 320300148
result:
ok 10 lines
Test #6:
score: 4.7619
Accepted
time: 1020ms
memory: 43108kb
input:
10 500 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101...
output:
523068127 580931200 279753758 9368367 561595432 690890919 369268447 846226737 285457745 261543809
result:
ok 10 lines
Test #7:
score: 0
Time Limit Exceeded
input:
1 5000 2 3 2 3 6 5 6 8 8 11 11 11 13 14 15 16 17 18 19 21 21 23 24 24 25 25 27 27 29 31 32 33 34 34 35 37 38 39 40 40 40 43 44 43 46 46 48 48 50 50 51 52 52 53 56 55 57 57 58 61 62 62 64 64 64 67 68 69 69 71 72 73 74 75 75 77 76 77 79 81 82 82 84 84 85 87 88 88 89 91 91 93 94 93 94 97 97 97 100 101 ...
output:
result:
Test #8:
score: 0
Wrong Answer
time: 26ms
memory: 5372kb
input:
10 100 1 1 4 2 2 4 3 2 4 2 3 2 3 1 1 2 2 1 2 3 3 4 4 2 2 2 1 3 2 3 4 3 1 2 2 4 4 2 1 4 3 2 4 4 1 1 3 4 4 4 1 2 3 2 4 2 3 1 2 1 1 2 2 3 2 4 2 2 2 2 4 2 4 4 2 1 3 1 2 1 2 3 2 2 3 2 2 4 2 2 3 2 2 4 4 4 1 2 3 2 100 2 3 2 3 3 3 3 2 2 2 1 3 1 2 3 4 3 3 3 3 4 2 3 4 1 1 2 3 3 3 1 4 4 1 4 2 4 3 2 3 4 4 1 3 2...
output:
495499116 641725200 527750263 37897605 508718229 462923038 310758002 255378182 56741606 823170861
result:
wrong answer 1st lines differ - expected: '762655378', found: '495499116'
Test #9:
score: 0
Wrong Answer
time: 22ms
memory: 5272kb
input:
10 100 4 1 4 1 4 2 3 4 1 2 1 3 2 4 2 2 3 4 2 4 3 1 3 3 4 2 3 4 3 1 2 2 2 2 4 4 2 1 1 2 1 2 4 3 1 2 2 1 1 2 1 3 2 4 4 3 2 3 4 1 1 2 2 2 2 3 4 3 4 2 2 1 2 1 2 3 4 1 3 2 1 3 3 1 4 3 1 1 2 4 4 1 4 3 3 2 1 1 2 2 100 1 2 3 2 1 4 1 4 3 3 1 2 3 3 4 3 4 2 2 3 3 2 3 3 3 3 2 2 1 1 1 1 2 2 2 4 1 4 3 1 3 3 3 4 2...
output:
363359445 346077895 962529104 599561011 615651815 601773205 602583086 308158664 739340691 789434537
result:
wrong answer 1st lines differ - expected: '46441250', found: '363359445'
Test #10:
score: 0
Wrong Answer
time: 27ms
memory: 5340kb
input:
10 100 1 2 3 2 2 1 1 2 1 1 1 4 2 1 1 1 1 2 2 2 1 2 4 2 4 3 1 4 3 3 3 1 4 1 3 4 3 3 3 4 2 3 3 3 4 3 2 4 4 2 4 4 4 1 1 1 3 1 4 2 3 1 4 4 4 4 1 3 1 3 4 4 4 1 4 3 2 1 2 1 3 2 2 3 2 1 2 4 4 4 1 4 3 2 3 2 4 2 1 4 100 3 1 3 1 2 2 1 2 1 3 1 1 4 1 1 1 1 1 2 3 2 4 3 2 4 1 2 4 4 2 1 1 2 4 1 4 2 1 2 1 2 3 2 2 1...
output:
502604414 292113978 895025312 770501780 455483387 104966518 455633687 313291357 137185573 312983796
result:
wrong answer 1st lines differ - expected: '621199694', found: '502604414'
Test #11:
score: 0
Wrong Answer
time: 29ms
memory: 5600kb
input:
10 100 8 3 1 5 7 5 8 9 5 6 3 1 2 8 8 3 2 3 1 2 7 7 10 9 1 4 6 9 9 2 7 1 8 9 3 8 10 6 8 2 6 5 2 8 4 6 7 2 5 9 5 2 7 3 6 1 7 1 7 8 9 1 6 7 10 4 4 6 1 4 4 5 2 1 9 9 1 5 7 2 6 8 9 2 2 8 9 9 4 4 8 6 3 9 9 10 4 5 2 9 100 4 3 1 2 9 9 2 7 4 6 10 5 10 4 5 6 9 2 3 2 6 4 10 7 6 4 6 1 1 6 4 2 1 1 4 3 4 7 8 3 1 ...
output:
2488320 629856000 258048 20321280 183500786 64512 328458240 3175200 13996800 906992640
result:
wrong answer 7th lines differ - expected: '335923200', found: '328458240'
Test #12:
score: 0
Wrong Answer
time: 16ms
memory: 5236kb
input:
10 100 193563111 193563110 193563109 193563108 193563109 193563108 193563109 193563109 193563110 193563111 193563110 193563110 193563109 193563111 193563110 193563109 193563108 193563110 193563109 193563107 193563108 193563110 193563110 193563110 193563109 193563110 193563108 193563107 193563106 193...
output:
654535165 57107274 382289091 542963261 742404204 320509008 320509008 19562167 538992043 742404204
result:
wrong answer 1st lines differ - expected: '725199468', found: '654535165'
Test #13:
score: 0
Wrong Answer
time: 16ms
memory: 5236kb
input:
10 100 165531093 165531092 165531090 165531090 165531088 165531089 165531089 165531090 165531091 165531090 165531090 165531091 165531089 165531089 165531089 165531087 165531088 165531088 165531086 165531086 165531085 165531084 165531084 165531083 165531084 165531083 165531084 165531084 165531085 165...
output:
125699332 793388666 873273371 74201732 273521609 382289091 513602576 137205613 742404204 137205613
result:
wrong answer 1st lines differ - expected: '977126526', found: '125699332'
Test #14:
score: 0
Wrong Answer
time: 1450ms
memory: 131100kb
input:
5 1000 835051605 835051606 835051607 835051608 835051609 835051609 835051608 835051608 835051609 835051610 835051609 835051609 835051609 835051610 835051610 835051609 835051609 835051608 835051607 835051607 835051606 835051606 835051606 835051606 835051605 835051606 835051606 835051606 835051604 835...
output:
736625768 568698435 941283756 826421027 573539193
result:
wrong answer 1st lines differ - expected: '93384863', found: '736625768'
Test #15:
score: 0
Wrong Answer
time: 1464ms
memory: 131268kb
input:
5 1000 551842461 551842460 551842459 551842459 551842457 551842457 551842459 551842458 551842456 551842455 551842456 551842458 551842459 551842457 551842457 551842458 551842456 551842456 551842455 551842454 551842452 551842451 551842453 551842451 551842453 551842453 551842453 551842454 551842453 551...
output:
74247461 386342361 459823530 524108839 311695356
result:
wrong answer 1st lines differ - expected: '167959558', found: '74247461'
Test #16:
score: 0
Wrong Answer
time: 1475ms
memory: 132200kb
input:
5 1000 911411059 911411057 911411057 911411055 911411055 911411053 911411054 911411055 911411056 911411055 911411055 911411055 911411054 911411055 911411056 911411058 911411058 911411058 911411057 911411058 911411059 911411059 911411060 911411060 911411060 911411059 911411059 911411059 911411060 911...
output:
606108300 933593379 629398962 35787694 229257102
result:
wrong answer 1st lines differ - expected: '749921974', found: '606108300'
Test #17:
score: 0
Wrong Answer
time: 1460ms
memory: 129604kb
input:
5 1000 239756971 239756970 239756971 239756970 239756969 239756970 239756969 239756970 239756969 239756968 239756969 239756968 239756969 239756969 239756968 239756967 239756966 239756966 239756967 239756966 239756966 239756966 239756966 239756966 239756967 239756965 239756966 239756967 239756967 239...
output:
867442949 647971664 66926193 425431808 747384167
result:
wrong answer 1st lines differ - expected: '205752624', found: '867442949'
Test #18:
score: 0
Time Limit Exceeded
input:
1 5000 316394141 316394140 316394140 316394141 316394141 316394141 316394141 316394140 316394140 316394141 316394140 316394141 316394141 316394140 316394141 316394141 316394141 316394140 316394140 316394139 316394140 316394139 316394139 316394139 316394139 316394140 316394140 316394140 316394139 316...
output:
result:
Test #19:
score: 0
Time Limit Exceeded
input:
1 5000 698334028 698334028 698334027 698334028 698334028 698334028 698334028 698334027 698334027 698334028 698334028 698334028 698334027 698334027 698334027 698334028 698334028 698334027 698334028 698334028 698334027 698334028 698334028 698334027 698334028 698334027 698334028 698334027 698334028 698...
output:
result:
Test #20:
score: 0
Time Limit Exceeded
input:
1 5000 104725913 104725912 104725912 104725912 104725912 104725913 104725913 104725913 104725913 104725912 104725913 104725913 104725912 104725912 104725912 104725912 104725913 104725912 104725913 104725912 104725913 104725913 104725913 104725913 104725913 104725912 104725913 104725912 104725913 104...
output:
result:
Test #21:
score: 0
Time Limit Exceeded
input:
1 5000 631500634 631500634 631500634 631500633 631500634 631500633 631500634 631500634 631500633 631500633 631500634 631500634 631500634 631500634 631500633 631500633 631500635 631500634 631500634 631500634 631500635 631500635 631500634 631500634 631500634 631500634 631500635 631500634 631500634 631...