This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "paint.h"
using namespace std;
const int N = 2e5 + 5;
bool f[N][105], g[N][105], can_b[N], can_w[N];
int c[105], black[N], white[N], t[N], n, k;
string solve_puzzle(string s, vector<int> _c) {
n = s.size(), k = _c.size();
copy(_c.begin(), _c.end(), c + 1);
s = "." + s + ".";
for(int i = 1; i <= n; ++i) {
black[i] = black[i - 1] + (s[i] == 'X');
white[i] = white[i - 1] + (s[i] == '_');
}
white[n + 1] = white[n];
f[0][0] = 1;
for(int i = 1; i <= n; ++i) {
f[i][0] = black[i] == 0;
for(int j = 1; j <= k; ++j) {
bool w = f[i - 1][j];
bool b = (i >= c[j]) && (s[i - c[j]] != 'X') && (white[i] == white[i - c[j]])
&& (i > c[j] ? f[i - c[j] - 1][j - 1] : (j == 1));
f[i][j] = s[i] == '_' ? w : s[i] == 'X' ? b : (w | b);
}
}
g[n + 1][k + 1] = g[n + 2][k + 1] = 1;
for(int i = n; i >= 1; --i) {
g[i][k + 1] = black[n] == black[i - 1];
for(int j = k; j >= 1; --j) {
bool w = g[i + 1][j];
bool b = (n - i + 1 >= c[j]) && (s[i + c[j]] != 'X') && (white[i - 1] == white[i + c[j] - 1])
&& g[i + c[j] + 1][j + 1];
g[i][j] = s[i] == '_' ? w : s[i] == 'X' ? b : (w | b);
}
}
for(int i = 1; i <= n; ++i) {
if(s[i] == '_') can_w[i] = 1;
else {
for(int c = 0; c <= k && !can_w[i]; ++c) {
can_w[i] |= f[i - 1][c] && g[i + 1][c + 1];
}
}
for(int j = 1; j <= k; ++j) {
if(i >= c[j] && s[i - c[j]] != 'X' && s[i + 1] != 'X' && white[i] == white[i - c[j]] &&
(i > c[j] ? f[i - c[j] - 1][j - 1] : (j == 1)) && g[i + 2][j + 1]) {
t[i - c[j] + 1]++; t[i + 1]--;
}
}
}
for(int i = 1; i <= n; ++i) {
t[i] += t[i - 1];
can_b[i] = t[i] > 0;
}
string ans = "";
for(int i = 1; i <= n; ++i) {
if(s[i] != '.') ans += s[i];
else {
if(can_w[i] && can_b[i]) ans += '?';
else ans += (can_w[i] ? '_' : 'X');
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |