QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#713591#2472. Counting Haybales_8_8_71.428571 99ms144888kbC++232.2kb2024-11-05 19:55:122024-11-05 19:55:13

Judging History

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

  • [2024-11-05 19:55:13]
  • 评测
  • 测评结果:71.428571
  • 用时:99ms
  • 内存:144888kb
  • [2024-11-05 19:55:12]
  • 提交

answer

#include <bits/stdc++.h>


using namespace std;
typedef long long ll;

const int N = 5e3 + 1, MOD = (int)1e9 + 7;

int n, h[N], dp[N][N], pref[N][2], mx[N][N], mn[N][N];
bool ok(int x, int y) {
    if(x < y) {
        if(mx[x + 1][y] > h[x] + 1 || mn[x + 1][y] < h[x] - 1) return false;
    } else {
        if(mx[y + 1][x - 1] > h[x] + 1 || mn[y + 1][x - 1] < h[x] - 1) return false;
    }
    return true;
}
void add(int &x, int y) {
    x += y;
    if(x >= MOD) x -= MOD;
}

void test() {
    memset(dp, 0, sizeof(dp));
    vector<int> e, o;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> h[i];
        if(h[i] & 1) {
            o.push_back(i); 
        } else {
            e.push_back(i);
        }
    }
    for(int i = 1; i <= n; i++) {
        mx[i][i - 1] = 0;
        mn[i][i - 1] = 1e9 + 10; 
        for(int j = i; j <= n; j++) {
            mx[i][j] = mx[i][j - 1];
            mn[i][j] = mn[i][j - 1];
            if(h[j] & 1) {
                mx[i][j] = max(mx[i][j], h[j]);
                mn[i][j] = min(mn[i][j], h[j]);
            }
        }
    }
    if(e.empty() || o.empty()) {
        cout << 1 << '\n';
        return;
    }
    for(int i:e) {
        if(ok(i, 0)) {
            dp[i][0] = 1;
        } else {
            break;
        }
    }
    int res = dp[e.back()][0];
    for(int i = 0; i < (int)e.size(); i++) {
        for(int j = 0; j < (int)o.size(); j++) {
            int x = e[i], y = o[j];
            if(ok(x, y)) {
                if(i) {
                    add(dp[x][y], dp[e[i - 1]][0]);
                    add(dp[x][y], pref[j][1]);
                } else {
                    add(dp[x][y], 1);
                }
            }
            if(i == (int)e.size() - 1) {
                add(res, dp[x][y]);
            }
            if(j) pref[j][0] = pref[j - 1][0];
            else pref[j][0] = 0;
            add(pref[j][0], dp[x][y]);
        }
        for(int j = 0; j < (int)o.size(); j++) {
            swap(pref[j][0], pref[j][1]);
        }
    }
    cout << res << '\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: 50ms
memory: 104496kb

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: 4.7619
Accepted
time: 88ms
memory: 103620kb

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
133
175
231
155
154

result:

ok 10 lines

Test #3:

score: 4.7619
Accepted
time: 88ms
memory: 104920kb

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
186
120
120
51
231
252
115
252
231

result:

ok 10 lines

Test #4:

score: 0
Memory 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:

493836655

result:


Test #5:

score: 4.7619
Accepted
time: 91ms
memory: 124424kb

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: 90ms
memory: 123516kb

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
Memory 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:

290956746

result:


Test #8:

score: 4.7619
Accepted
time: 79ms
memory: 109012kb

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:

762655378
567764360
228518291
538721530
87546958
974544188
16895117
983492342
273849796
708122840

result:

ok 10 lines

Test #9:

score: 4.7619
Accepted
time: 90ms
memory: 108148kb

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:

46441250
54311602
250886215
794423726
648710286
557560030
81113960
925275253
859511541
923517702

result:

ok 10 lines

Test #10:

score: 4.7619
Accepted
time: 99ms
memory: 106624kb

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:

621199694
33992159
596987282
686898161
413935763
385374226
400768792
8955878
825420054
312467980

result:

ok 10 lines

Test #11:

score: 4.7619
Accepted
time: 95ms
memory: 107740kb

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
335923200
3175200
13996800
906992640

result:

ok 10 lines

Test #12:

score: 4.7619
Accepted
time: 87ms
memory: 109864kb

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:

725199468
872897576
382289091
242465517
742404204
320509008
320509008
338635045
538992043
742404204

result:

ok 10 lines

Test #13:

score: 4.7619
Accepted
time: 91ms
memory: 107844kb

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:

977126526
360509330
504170368
74201732
273521609
382289091
120934403
137205613
742404204
137205613

result:

ok 10 lines

Test #14:

score: 4.7619
Accepted
time: 55ms
memory: 143932kb

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:

93384863
568698435
969293251
826421027
573539193

result:

ok 5 lines

Test #15:

score: 4.7619
Accepted
time: 56ms
memory: 142440kb

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:

167959558
386342361
519316672
524108839
744133081

result:

ok 5 lines

Test #16:

score: 4.7619
Accepted
time: 59ms
memory: 142208kb

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:

749921974
933593379
262392129
475137418
229257102

result:

ok 5 lines

Test #17:

score: 4.7619
Accepted
time: 69ms
memory: 144888kb

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:

205752624
180116804
708871014
425431808
621863530

result:

ok 5 lines

Test #18:

score: 0
Memory 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:

651398981

result:


Test #19:

score: 0
Memory 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:

192833632

result:


Test #20:

score: 0
Memory 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:

433813305

result:


Test #21:

score: 0
Memory 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:

218954931

result: