QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#424986 | #3223. Cellular Automaton | rizynvu | WA | 0ms | 3900kb | C++14 | 1.6kb | 2024-05-29 20:32:12 | 2024-05-29 20:32:12 |
Judging History
answer
#include<bits/stdc++.h>
const int maxn = 1 << 7;
int dis[maxn], vis[maxn];
std::vector<std::pair<int, int> > to[maxn];
int S[maxn];
int main() {
int w, m, n;
scanf("%d", &w), m = 1 << w * 2, n = m << 1;
for (int i = 0; i < n; i++) scanf("%1d", &S[i]);
auto check = [&](int lim) {
for (int u = 0; u < m; u++)
to[u].clear(), dis[u] = 1e9, vis[u] = 0;
for (int u = 0; u < m; u++)
for (int w : {0, 1}) {
int p = (u << 1) | w, v = p & (m - 1);
if (p <= lim)
to[u].emplace_back(v, w - S[p]), to[v].emplace_back(u, S[p] - w);
else if (! w)
to[u].emplace_back(v, 0), to[v].emplace_back(u, 1);
else
to[u].emplace_back(v, 1), to[v].emplace_back(u, 0);
}
std::queue<int> Q;
dis[0] = 0, Q.push(0);
while (! Q.empty() && dis[0] >= 0) {
int u = Q.front();
Q.pop(), vis[u] = 0;
for (auto _ : to[u]) {
int v = _.first, w = _.second;
if (dis[u] + w < dis[v])
dis[v] = dis[u] + w, ! vis[v] && (Q.push(v), vis[v] = 1);
}
}
return dis[0] >= 0;
};
if (check(n - 1)) {
for (int i = 0; i < n; i++) printf("%d", S[i]);
return puts(""), 0;
}
for (int i = n - 1; ~ i; i--)
if ((S[i] ^= 1) && check(i)) {
for (int j = i + 1; j < n; j++)
S[j] = 0, S[j] ^= ! check(j);
for (int j = 0; j < n; j++) printf("%d", S[j]);
return puts(""), 0;
}
puts("-1");
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3900kb
input:
1 11111111
output:
-1
result:
wrong answer 1st lines differ - expected: 'no', found: '-1'