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 "paint_c.h"
#define N 200000
#define K 100
void solve_puzzle(int n, char *aa, int k, int *ll, char *cc) {
static char dp[N + 1][K + 1], dq[N + 1][K + 1], can_w[N + 1];
static int pp[N], can_b[N + 1];
int h, i, l;
for (i = 0; i < n; i++)
pp[i] = aa[i] == '_' ? i : (i == 0 ? -1 : pp[i - 1]);
dp[0][0] = 1;
for (i = 1; i <= n; i++)
for (h = 0; h <= k; h++) {
l = h == 0 ? -1 : ll[h - 1];
dp[i][h] = aa[i - 1] != 'X' && dp[i - 1][h] || h > 0 && pp[i - 1] < i - l && (i == l ? h == 1 : aa[i - 1 - l] != 'X' && dp[i - 1 - l][h - 1]);
}
dq[n][k] = 1;
for (i = n - 1; i >= 0; i--)
for (h = k; h >= 0; h--) {
l = h == k ? -1 : ll[h];
dq[i][h] = aa[i] != 'X' && dq[i + 1][h] || h < k && i + l <= n && pp[i + l - 1] < i && (i + l == n ? h == k - 1 : aa[i + l] != 'X' && dq[i + l + 1][h + 1]);
}
for (i = 0; i < n; i++)
for (h = 0; h <= k; h++)
if (dp[i][h] && dq[i + 1][h]) {
can_w[i] = 1;
break;
}
for (h = 0; h < k; h++) {
l = ll[h];
for (i = 0; i + l <= n; i++)
if (pp[i + l - 1] < i && (i == 0 ? h == 0 : aa[i - 1] != 'X' && dp[i - 1][h]) && (i + l == n ? h == k - 1 : aa[i + l] != 'X' && dq[i + l + 1][h + 1]))
can_b[i]++, can_b[i + l]--;
}
for (i = 1; i <= n; i++)
can_b[i] += can_b[i - 1];
for (i = 0; i < n; i++)
cc[i] = aa[i] == '.' ? (can_w[i] && can_b[i] ? '?' : (can_w[i] ? '_' : 'X')) : aa[i];
}
Compilation message (stderr)
paint.c: In function 'solve_puzzle':
paint.c:17:32: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
17 | dp[i][h] = aa[i - 1] != 'X' && dp[i - 1][h] || h > 0 && pp[i - 1] < i - l && (i == l ? h == 1 : aa[i - 1 - l] != 'X' && dp[i - 1 - l][h - 1]);
| ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
paint.c:23:28: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
23 | dq[i][h] = aa[i] != 'X' && dq[i + 1][h] || h < k && i + l <= n && pp[i + l - 1] < i && (i + l == n ? h == k - 1 : aa[i + l] != 'X' && dq[i + l + 1][h + 1]);
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
# | 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... |