QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#466735#4658. 移除石子james1BadCreeper100 ✓370ms11996kbC++172.6kb2024-07-08 06:59:122024-07-08 06:59:13

Judging History

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

  • [2024-07-08 06:59:13]
  • 评测
  • 测评结果:100
  • 用时:370ms
  • 内存:11996kb
  • [2024-07-08 06:59:12]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long i64;
typedef unsigned long long u64; 
const int N = 1e3 + 5; 
const int P = 1e9 + 7; 
const int M = 1e5 + 5; 

inline void add(int &x, int k) { x += k; x -= x >= P ? P : 0; }
inline void ckmin(int &x, int k) { x = x < k ? x : k; }

int n, m; 
int L[N], R[N]; 

struct Node {
    int f[3][3]; 
    Node() { memset(f, 0x3f, sizeof f); }
    bool win(void) { return f[0][0] <= m; }
    u64 enc(void) {
        u64 h = 0; 
        for (int i = 0; i < 3; ++i) 
            for (int j = 0; j < 3; ++j)
                h = h * 233 + f[i][j]; 
        return h; 
    }
} b[M]; 
unordered_map<u64, int> mp; 
int tot; 

int G[M][9]; 
void bfs(void) {
    Node I; I.f[0][0] = 0; b[++tot] = I; mp[I.enc()] = tot; 
    queue<int> q; q.push(1); 
    while (!q.empty()) {
        int id = q.front(); q.pop(); 
        Node fr = b[id]; 
        for (int i = 0; i <= 8; ++i) {
            Node to; 
            for (int j = 0; j < 3; ++j)
                for (int k = 0; k < 3; ++k) if (fr.f[j][k] <= 100) {
                    for (int l = 0; l < 3; ++l) {
                        int u = i - j - k - l; 
                        int v = u < 0 ? -u : u == 1 ? 1 : 0; 
                        for (int p = k; p <= j + k && p < 3; ++p)
                            ckmin(to.f[p][l], fr.f[j][k] + v); 
                    }
                }
            if (mp.find(to.enc()) == mp.end()) b[++tot] = to, mp[to.enc()] = tot, q.push(tot); 
            G[id][i] = mp[to.enc()]; 
        }
    }
}

int f[2][M]; 

void solve(void) {
    cin >> n >> m; 
    for (int i = 1; i <= n; ++i) cin >> L[i] >> R[i]; 
    memset(f, 0, sizeof f); f[0][1] = 1; 

    for (int i = 1; i <= n; ++i) {
        int o = i & 1; memset(f[o], 0, sizeof f[o]); 
        int l = L[i], r = min(R[i], 7); 
        for (int j = 1; j <= tot; ++j) if (f[o ^ 1][j]) {
            for (int k = l; k <= r; ++k) add(f[o][G[j][k]], f[o ^ 1][j]); 
            int v = max(0, R[i] - max(8, L[i]) + 1); 
            add(f[o][G[j][8]], 1ll * f[o ^ 1][j] * v % P); 
        }
    }
    int ans = 0; 
    for (int i = 1; i <= tot; ++i) if (b[i].win()) add(ans, f[n & 1][i]); 

    if (m == 1) {
        if (*max_element(L + 1, L + n + 1) == 0) --ans; 
        if (n == 3 && *max_element(L + 1, L + n + 1) <= 1 && *max_element(R + 1, R + n + 1) >= 1) --ans; 
    }
    cout << (ans + P) % P << "\n"; 
}

int main(void) {
    ios::sync_with_stdio(0); 
    bfs(); 
    cerr << tot << "\n"; 
    int T = 1; cin >> T; 
    while (T--) solve();
    return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 5
Accepted
time: 9ms
memory: 11792kb

input:

10
5 2
1 3
0 5
1 4
0 1
1 2
5 0
0 3
0 1
0 3
0 2
1 1
5 0
1 2
1 3
3 3
3 4
0 0
5 1
1 1
0 4
3 4
0 4
0 4
5 0
1 1
1 5
0 5
0 1
1 4
5 2
3 4
2 4
0 3
1 3
0 1
5 2
1 4
0 4
0 4
1 2
0 1
5 0
0 4
0 5
0 2
3 4
1 1
3 1
0 5
0 4
0 4
3 1
1 5
1 4
1 4

output:

288
20
10
246
138
144
400
99
148
79

result:

ok 10 numbers

Test #2:

score: 5
Accepted
time: 4ms
memory: 11712kb

input:

10
5 0
0 0
1 4
2 4
1 4
0 3
5 0
1 4
1 5
4 5
0 4
3 4
5 0
1 4
0 3
0 2
3 5
1 2
5 1
1 2
0 4
1 3
1 4
2 4
5 0
0 5
0 1
0 1
0 1
1 2
5 0
1 3
0 3
1 2
1 5
2 3
5 1
0 5
1 5
0 4
0 1
0 3
5 0
1 3
1 3
1 5
1 4
1 4
3 1
0 4
0 1
0 5
3 1
1 3
1 5
1 2

output:

155
392
167
359
26
165
1182
646
58
29

result:

ok 10 numbers

Test #3:

score: 5
Accepted
time: 8ms
memory: 9288kb

input:

10
5 2
0 5
0 3
0 3
1 4
2 4
5 0
1 3
1 4
0 1
4 4
1 5
5 1
0 3
0 5
1 1
1 2
2 4
5 0
1 5
1 4
1 4
1 3
3 4
5 0
1 2
1 4
3 4
1 3
0 4
5 2
1 3
1 3
0 5
1 5
3 3
5 2
0 5
0 4
1 3
1 4
2 3
5 0
0 3
1 1
1 1
0 2
1 2
3 1
0 4
0 4
0 5
3 1
1 3
1 4
1 3

output:

1152
77
144
450
224
270
720
12
148
35

result:

ok 10 numbers

Test #4:

score: 5
Accepted
time: 78ms
memory: 11704kb

input:

10
1000 0
1 1
4 4
5 5
0 0
2 2
1 1
810768785 810768785
4 4
3 3
2 2
3 3
145678201 145678201
539852093 539852093
3 3
824112952 824112952
3 3
929791266 929791266
3 3
3 3
3 3
0 0
2 2
4 4
4 4
3 3
194646042 194646042
2 2
4 4
3 3
922195284 922195284
676532270 676532270
3 3
3 3
3 3
2 2
5 5
0 0
749247771 7492...

output:

0
1
0
0
1
1
0
0
1
1

result:

ok 10 numbers

Test #5:

score: 5
Accepted
time: 79ms
memory: 9416kb

input:

10
1000 0
6 6
1 1
4 4
2 2
560230659 560230659
2 2
213604931 213604931
4 4
324411778 324411778
5 5
5 5
0 0
68050744 68050744
5 5
1 1
363300583 363300583
2 2
2 2
4 4
957157567 957157567
6 6
3 3
1 1
3 3
2 2
4 4
4 4
4 4
6 6
2 2
0 0
5 5
404555679 404555679
3 3
2 2
1 1
6 6
2 2
4 4
6 6
891397980 891397980
...

output:

0
0
0
1
1
0
0
1
1
1

result:

ok 10 numbers

Test #6:

score: 5
Accepted
time: 82ms
memory: 8976kb

input:

10
1000 69
1 1
1 1
4 4
2 2
1 1
4 4
2 2
1 1
4 4
1 1
0 0
0 0
0 0
0 0
2 2
3 3
1 1
2 2
3 3
3 3
0 0
4 4
3 3
1 1
0 0
2 2
80216297 80216297
1 1
2 2
367878274 367878274
174533945 174533945
746703557 746703557
2 2
245782009 245782009
4 4
0 0
3 3
2 2
0 0
4 4
3 3
1 1
3 3
2 2
2 2
0 0
0 0
114241517 114241517
0 0...

output:

1
0
0
1
1
0
1
1
0
0

result:

ok 10 numbers

Test #7:

score: 5
Accepted
time: 85ms
memory: 9500kb

input:

10
1000 65
3 3
3 3
1 1
3 3
1 1
2 2
2 2
2 2
0 0
1 1
0 0
0 0
3 3
4 4
373336720 373336720
1 1
1 1
4 4
1 1
2 2
1 1
2 2
0 0
4 4
1 1
1 1
1 1
0 0
1 1
1 1
0 0
252809300 252809300
707166173 707166173
1 1
960759336 960759336
2 2
2 2
0 0
3 3
0 0
3 3
0 0
4 4
0 0
1 1
2 2
2 2
1 1
1 1
0 0
780478034 780478034
0 0
4...

output:

1
0
0
1
0
0
1
1
0
0

result:

ok 10 numbers

Test #8:

score: 5
Accepted
time: 87ms
memory: 9468kb

input:

10
1000 48
0 0
1 1
2 2
13941343 13941343
2 2
2 2
0 0
265685928 265685928
0 0
1 1
1 1
3060608 3060608
2 2
0 0
0 0
0 0
1 1
15129724 15129724
0 0
4 4
1 1
297040447 297040447
1 1
3 3
0 0
2 2
1 1
4 4
2 2
1 1
0 0
934313429 934313429
1 1
1 1
1 1
0 0
0 0
1 1
686872027 686872027
1 1
1 1
352017933 352017933
0...

output:

1
0
0
1
1
1
0
0
0
0

result:

ok 10 numbers

Test #9:

score: 5
Accepted
time: 336ms
memory: 9624kb

input:

10
1000 0
1 3
0 367881929
0 908183395
0 294640584
0 130052878
0 460518566
0 380428363
1 6
0 617579265
1 855387669
0 2
0 2
0 4
0 730594613
2 275854270
0 1
0 4
0 5
0 151804972
0 567677095
0 479119369
0 665035693
0 3
0 1
0 1
0 3
0 985093649
0 1
0 255818414
0 4
0 1
0 163849171
0 525071507
3 823579180
0 ...

output:

173378122
136961982
916142335
254618610
127210945
688422027
194757687
199396796
90178999
86533905

result:

ok 10 numbers

Test #10:

score: 5
Accepted
time: 339ms
memory: 9624kb

input:

10
1000 0
0 220657533
0 490453431
0 663241659
0 3
0 5
0 417978574
4 7
0 641068595
0 1
0 4
0 132285008
0 788406229
0 139937681
0 3
0 969737879
3 444383529
1 443896824
0 836047684
2 3
0 3
1 420847062
0 663834045
0 2
0 578231941
0 5
0 1
0 604459134
0 4
0 955346381
0 360957147
4 525140508
0 3
1 15822405...

output:

222237218
898759263
640639324
538187759
29656948
29843021
97600405
189219923
850973942
765846801

result:

ok 10 numbers

Test #11:

score: 5
Accepted
time: 335ms
memory: 11996kb

input:

10
1000 0
2 678511582
0 154994295
0 5
2 6
0 1
1 2
0 4
0 196232388
0 1
0 3
0 13247534
0 5
7093249 957022507
1 4
0 906064888
1 2
0 5
1 4
0 256766734
0 636905132
0 370094191
0 2
0 117006010
0 4
0 59582976
1 634540188
0 4
0 677905036
0 5
0 400766826
1 5
3 8
0 665083613
0 4
0 5
0 2
0 730308274
0 89231895...

output:

179406276
724899518
957139040
561017296
993781901
7394650
851299544
397397425
256338857
375918555

result:

ok 10 numbers

Test #12:

score: 5
Accepted
time: 335ms
memory: 9300kb

input:

10
1000 0
0 3
0 5
1 3
0 2
0 377151268
0 4
0 434362897
1 962769308
0 89047812
1 136192105
0 441748730
0 237192940
1 465698860
0 42439355
1 5829347
349949910 802921919
2 5
0 3
1 2
0 390569672
1 607009222
0 512482679
0 416439678
0 3
0 912993280
0 3
3 340960525
0 1
0 688478781
0 5
0 1
1 4
0 712235930
0 ...

output:

319258319
704077987
334372886
88970718
825618506
89533635
834045134
197952117
262319440
924373409

result:

ok 10 numbers

Test #13:

score: 5
Accepted
time: 335ms
memory: 11796kb

input:

10
1000 0
0 1
0 4
0 4
0 2
0 3
4 8
1 809130801
0 187920166
0 2
0 3
0 254674697
0 649121331
0 197259413
0 192443143
0 917579552
0 49799772
1 302721613
0 723809824
0 4
0 932825140
1 2
1 4
0 1
0 939720825
0 1
0 652682854
0 292912959
0 426026563
0 969801845
1 3
0 3
0 4
882209199 882209204
0 379900439
0 2...

output:

108367557
582756296
340002669
368867033
956907932
609145813
884525075
197867228
497772463
543026922

result:

ok 10 numbers

Test #14:

score: 5
Accepted
time: 363ms
memory: 9660kb

input:

10
1000 47
0 6
0 7
0 6
1 1
0 8
2 9
1 7
0 8
0 7
3 5
0 7
0 4
0 10
0 6
0 6
0 10
0 7
1 1
0 10
0 1
0 7
1 8
0 10
1 2
0 9
0 7
0 1
1 10
0 3
0 7
0 9
0 2
0 9
0 0
0 9
0 7
0 7
1 2
0 0
1 6
0 9
0 6
0 6
1 2
0 2
0 1
1 6
0 10
1 10
0 9
3 6
0 6
0 7
1 9
0 8
0 10
1 1
1 10
0 0
0 8
0 3
0 6
0 4
0 0
0 9
0 6
0 10
0 9
1 8
0 1...

output:

738316084
851375644
215922397
796061309
613737649
625134896
763030167
895156394
390
629

result:

ok 10 numbers

Test #15:

score: 5
Accepted
time: 370ms
memory: 11736kb

input:

10
1000 99
1 10
0 9
0 8
0 10
1 6
0 7
0 9
1 10
0 6
0 7
0 7
0 9
0 8
0 3
0 9
1 4
0 6
0 9
0 9
0 7
0 10
1 8
1 6
0 6
0 8
0 6
0 9
1 1
0 4
0 0
0 0
0 0
0 1
0 6
0 2
1 7
0 9
0 3
0 7
1 6
0 10
0 9
0 10
1 10
0 3
1 9
0 7
0 10
0 7
0 1
0 0
0 10
0 10
1 9
0 7
1 10
0 6
0 2
0 6
0 8
0 6
1 10
0 7
0 6
0 9
0 10
0 5
0 6
1 10...

output:

733982136
102430704
60640349
118024157
199614437
344227954
456030385
641753587
439
47

result:

ok 10 numbers

Test #16:

score: 5
Accepted
time: 333ms
memory: 11788kb

input:

10
1000 94
0 27082101
1 2
0 5
0 182284057
0 2
0 854596927
0 486081504
0 1
4 212942070
2 4
0 4
0 5
0 2
0 937988325
0 839634252
259385372 259385374
0 3
1 520768268
0 3
0 609270333
0 838621534
0 384090136
1 3
0 667788367
0 389605576
0 992710428
0 960391094
0 1
2 658423697
1 2
0 273159245
0 4
4 31114796...

output:

870680517
115603606
316557289
9766681
341971672
699464798
673647918
579459822
470969116
513966924

result:

ok 10 numbers

Test #17:

score: 5
Accepted
time: 324ms
memory: 11664kb

input:

10
1000 99
1 558836520
0 4
0 3
0 534121003
0 5
0 264739171
0 379370191
0 4
0 100490264
0 2
0 3
1 619605387
0 2
0 3
0 5
4 5
1 294486083
1 2
3 990787247
0 1
1 256196937
0 3
0 2
0 166482225
0 5
0 1
0 5
0 109407731
0 4
0 5
0 3
0 180703250
0 3
0 129133161
0 5
2 7
0 264096332
0 1
0 5
0 726281357
0 1762581...

output:

607861904
949464630
310737889
901015114
63397672
78280034
546669719
323568666
599807376
682628680

result:

ok 10 numbers

Test #18:

score: 5
Accepted
time: 331ms
memory: 9288kb

input:

10
1000 100
0 3
0 1
1 6
740414081 740414084
1 357189447
1 743739464
0 4
0 1
0 5
0 1
0 30073625
0 4
0 2
0 542888320
0 514884644
1 3
1 305222417
0 386325593
0 1
0 3
1 157562404
0 366404826
0 4
0 3
1 619491195
0 5
0 196255155
1 4
1 4
3 8
2 3
1 6
0 5
0 3
0 5
0 1
0 5
0 642145333
0 2
0 181627666
0 2
0 820...

output:

4422166
693621079
976753856
661121801
145391180
904105062
226347471
501222662
228465436
73571647

result:

ok 10 numbers

Test #19:

score: 5
Accepted
time: 333ms
memory: 11992kb

input:

10
1000 55
0 364881620
0 1
0 851413241
1 4
4 700024576
0 876649436
0 357726767
0 404571776
1 2223463
0 817905335
1 2
0 5
0 4
0 4
0 3
0 847654812
0 3
0 361081695
0 4
0 850218128
0 5
1 4
0 390585804
0 741480334
0 5
0 469714353
0 2
3 7042948
0 427747116
0 2
0 1
0 2
0 2
0 2
0 732348976
0 206547221
0 915...

output:

129875514
536209979
184299929
663086436
741463676
512639422
296588360
884058530
90713199
112286467

result:

ok 10 numbers

Test #20:

score: 5
Accepted
time: 334ms
memory: 9816kb

input:

10
1000 99
0 4
0 579831503
0 2
1 21069180
0 124983788
0 4
0 356520474
1 211150192
0 4
0 204201013
0 247203842
0 4
1 6
1 3
1 2
3 7
0 3
1 760511272
0 5
4 7
2 5
0 1
1 946697431
0 3
0 689207096
0 1
1 4
1 3
1 3
0 549119893
3 6
1 5
0 2
0 2
1 536582539
1 6
0 282097774
1 6
0 942901239
0 2
0 5
0 777338255
0 ...

output:

237399696
903617229
705682333
31063859
490067931
459932342
46423067
801059201
35316932
780708950

result:

ok 10 numbers

Extra Test:

score: 0
Extra Test Passed