QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#466735 | #4658. 移除石子 | james1BadCreeper | 100 ✓ | 370ms | 11996kb | C++17 | 2.6kb | 2024-07-08 06:59:12 | 2024-07-08 06:59:13 |
Judging History
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