QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#582892 | #4514. Schrödinger and Pavlov | _114514_ | 50 ✓ | 1009ms | 4096kb | C++17 | 2.2kb | 2024-09-22 17:43:31 | 2024-09-22 17:43:31 |
Judging History
answer
# include <cstdlib>
# include <tuple>
# include <utility>
# include <cassert>
# include <vector>
# include <algorithm>
# include <cstdio>
# include <iostream>
namespace khin {
using namespace std;
namespace main {
inline namespace source {}
namespace d { void main(); }
}
}
int main() { khin::main::d::main(); }
namespace khin::main::d {
namespace test_case {
constexpr uint mod(1'000'000'007);
constexpr uint n_max(5'000);
struct box { char c; uint b; uint f; bool vis; };
uint n; box b[n_max + 1]; uint ans;
void main(ushort const x) {
cin >> n;
for (uint i(1); i <= n; ++i) cin >> b[i].c;
for (uint i(1); i <= n; ++i) cin >> b[i].b;
[] {
vector<uint> c(1, n);
while (b[c.back()].vis = true, !b[b[c.back()].b].vis)
c.push_back(b[c.back()].b);
for (uint const x : c) b[x].vis = false;
c.erase(c.begin(), find(c.begin(), c.end(), b[c.back()].b));
b[*min_element(c.begin(), c.end())].vis = true;
} ();
for (uint const x : { 0, 1 }) for (uint const y : { 0, 1 }) {
for (uint i(1); i <= n; ++i) switch (b[i].c) {
case 'C': b[i].f = 1; break;
case '.': b[i].f = 0; break;
case '?': b[i].f = (mod + 1) / 2; break;
default : assert(false);
}
uint r(1);
for (uint i(1); i <= n; ++i) {
if (b[i].vis) {
uint &p(b[i].f), &q(b[b[i].b].f);
r = 1ul * r * (x ? p : 1 - p + mod) % mod;
r = 1ul * r * (y ? q : 1 - q + mod) % mod;
p = x && y, q = x || y;
} else {
uint &p(b[i].f), &q(b[b[i].b].f);
uint const x(1ul * p * q % mod);
uint const y((p + q - 1ul * p * q % mod + mod) % mod);
tie(p, q) = make_pair(x, y);
}
}
ans = (ans + 1ul * r * b[n].f) % mod;
}
for (uint i(1); i <= n; ++i)
ans = ans * (b[i].c == '?' ? 2 : 1) % mod;
printf("Case #%hu: %u\n", x, ans);
fill(b + 1, b + n + 1, box()), ans = 0;
}
}
void main() {
ushort t; cin >> t;
for (ushort i(1); i <= t; ++i) test_case::main(i);
}
}
Details
Tip: Click on the bar to expand more detailed information
Pretests
Final Tests
Test #1:
score: 8
Accepted
time: 19ms
memory: 3716kb
input:
1234 92 ???????????????????????????????????????????????????????????????????????????????????????????? 2 1 2 3 4 7 5 7 8 9 15 9 15 12 14 15 16 19 16 17 17 20 22 23 24 25 26 27 28 29 30 31 32 33 34 38 34 39 35 39 45 40 42 43 44 45 46 47 48 49 50 51 52 57 53 55 56 56 57 59 60 61 62 63 64 64 66 67 68 69 ...
output:
Case #1: 75340207 Case #2: 248320570 Case #3: 1 Case #4: 501005577 Case #5: 0 Case #6: 0 Case #7: 0 Case #8: 988185614 Case #9: 0 Case #10: 840220993 Case #11: 140130951 Case #12: 8 Case #13: 0 Case #14: 0 Case #15: 570065479 Case #16: 128 Case #17: 67108864 Case #18: 0 Case #19: 0 Case #20: 5605238...
result:
ok 1234 lines
Test #2:
score: 42
Accepted
time: 1009ms
memory: 4096kb
input:
1234 4693 ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????...
output:
Case #1: 13595505 Case #2: 0 Case #3: 370024028 Case #4: 332957307 Case #5: 0 Case #6: 401898087 Case #7: 588719939 Case #8: 0 Case #9: 0 Case #10: 0 Case #11: 893344250 Case #12: 816205426 Case #13: 902710840 Case #14: 735342227 Case #15: 0 Case #16: 623834768 Case #17: 195615577 Case #18: 44692699...
result:
ok 1234 lines