QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#712563#2472. Counting Haybales_8_8_#14.285714 1475ms132200kbC++232.7kb2024-11-05 16:10:382024-11-05 16:10:40

Judging History

你现在查看的是最新测评结果

  • [2024-11-05 16:10:40]
  • 评测
  • 测评结果:14.285714
  • 用时:1475ms
  • 内存:132200kb
  • [2024-11-05 16:10:38]
  • 提交

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...

output:


result: