QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#329654 | #5071. Check Pattern is Good | Watware | TL | 62ms | 4220kb | C++17 | 4.1kb | 2024-02-17 00:16:05 | 2024-02-17 00:16:05 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
constexpr int M = 220, E = 40010, S = 1, T = 2, inf = 1000000;
bool flag = true;
char c;
int t, n, m, e, mp[M][M], id[M][M], dep[E], x[M], y[M];
int to[E], nxt[E], val[E], head[E], cur[E], tot;
inline void add(int u, int v, int w) {
to[tot] = v, val[tot] = w, nxt[tot] = head[u], head[u] = tot++;
}
inline void add(int u, int v) {
// printf("add %d -> %d\n", u, v);
add(u, v, 1), add(v, u, 0);
}
inline void adde(int u, int v) {
// printf("add %d -> %d\n", u, v);
add(u, v + e, inf), add(v + e, u, 0);
add(v, u + e, inf), add(u + e, v, 0);
}
inline bool bfs() {
queue<int> q;
// for (int i = 1; i <= tot; i++) dep[i] = -1;
memset(dep, -1, tot * sizeof(int));
dep[S] = 0, q.push(S);
while (!q.empty()) {
int p = q.front();
q.pop();
for (int i = head[p]; i; i = nxt[i])
if (val[i] && dep[to[i]] == -1) dep[to[i]] = dep[p] + 1, q.push(to[i]);
}
return dep[T] != -1;
}
int dfs(int n, int fl) {
if (n == T) return fl;
int lf = fl;
for (int &i = cur[n]; i; i = nxt[i])
if (dep[to[i]] == dep[n] + 1 && val[i]) {
int g = dfs(to[i], min(fl, val[i]));
lf -= g, val[i] -= g, val[i ^ 1] += g;
if (!lf) return fl;
}
return fl - lf;
}
inline int dinic() {
int result = 0;
while (bfs()) memcpy(cur, head, tot * sizeof(int)), result += dfs(S, inf);
return result;
}
inline void solve() {
assert(scanf("%d%d", &n, &m)), e = (n - 1) * (m - 1);
memset(head, 0, sizeof(head)), tot = id[0][0] = 2;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
assert(scanf(" %c", &c));
// if (flag && t == 9988) printf("%c", c);
if (c == '?') mp[i][j] = -1;
else mp[i][j] = ((i + j) & 1) ^ (c == 'W');
}
// if (flag && t == 9988) printf("\n");
}
// if (flag && t != 9988) return;
int ans = 0;
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++) id[i][j] = ++id[0][0], x[id[0][0]] = i, y[id[0][0]] = j;
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++) {
bool e0 = false, e1 = false;
for (int u = i; u <= i + 1; u++)
for (int v = j; v <= j + 1; v++)
if (mp[u][v] == 1) e1 = true;
else if (mp[u][v] == 0) e0 = true;
add(id[i][j], id[i][j] + e, inf), add(id[i][j] + e, id[i][j], 0);
if (!e1) add(S, id[i][j]), ans++;
if (!e0) add(id[i][j] + e, T), ans++;
}
for (int i = 1; i < n; i++)
for (int j = 1; j < m; j++) {
if (i + 1 < n) adde(id[i][j], id[i + 1][j]);
if (j + 1 < m) adde(id[i][j], id[i][j + 1]);
if (i + 1 < n && j + 1 < m) adde(id[i][j], id[i + 1][j + 1]);
if (i + 1 < n && j - 1 >= 1) adde(id[i][j], id[i + 1][j - 1]);
}
// printf("!!! %d\n", ans);
printf("%d\n", ans - dinic());
bfs();
// for (int i = 1; i < n; i++)
// for (int j = 1; j < m; j++) {
// int t = dep[id[i][j]] != -1 ? 0 : 1;
// printf("%d %d :: %d\n", i, j, t);
// for (int u = i; u <= i + 1; u++)
// for (int v = j; v <= j + 1; v++)
// if (mp[u][v] == -1) mp[u][v] = t;
// }
for (int i = head[S]; i; i = nxt[i])
if (val[i] || dep[to[i]] != -1) {
// printf("!!! %d %d\n", x[to[i]], y[to[i]]);
for (int u = x[to[i]]; u <= x[to[i]] + 1; u++)
for (int v = y[to[i]]; v <= y[to[i]] + 1; v++)
assert(mp[u][v] == 0 || mp[u][v] == -1), mp[u][v] = 0;
}
for (int i = 1; i <= n; i++, printf("\n"))
for (int j = 1; j <= m; j++) {
if (mp[i][j] == -1) mp[i][j] = 1;
mp[i][j] ^= (i + j) & 1;
putchar(mp[i][j] ? 'W' : 'B');
}
}
int main() {
assert(scanf("%d", &t));
if (t != 10000) flag = false;
while (t--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3928kb
input:
3 2 2 ?? ?? 3 3 BW? W?B ?BW 3 3 BW? W?W ?W?
output:
1 WB BW 1 BWW WWB WBW 4 BWB WBW BWB
result:
ok ok (3 test cases)
Test #2:
score: 0
Accepted
time: 62ms
memory: 4220kb
input:
10000 9 2 BB BW WW WW ?W ?B B? W? BB 6 2 ?? ?B B? BW WW ?? 10 7 WBBBW?? ???BWWW ???BWWB ??WWBW? BBWBBWB WWB?WW? BWBW??? WWWWBBW BBWBB?W B?W?W?B 4 7 ??WBWWB ?BBWWWB ?W?BBB? BBBWBBB 10 1 B W ? B B W W W B ? 10 4 ??WW W?W? WWW? ???W ?W?? ?W?W W?W? ?W?W ???W ???W 8 3 WBW W?? ??? ??? W?W W?W ??? ?W? 4 1 ...
output:
3 BB BW WW WW BW WB BW WB BB 2 BW WB BW BW WW BW 9 WBBBWBW BWBBWWW WBWBWWB BWWWBWB BBWBBWB WWBWWWB BWBWWBW WWWWBBW BBWBBBW BWWWWWB 6 BWWBWWB WBBWWWB BWWBBBW BBBWBBB 0 B W W B B W W W B B 15 BWWW WBWW WWWB WBBW BWWB BWBW WBWB BWBW WBWW BWBW 8 WBW WWB WBW BWB WBW WWW WBW BWB 0 W B W B 1 WBWB WWBB 3 BW...
result:
ok ok (10000 test cases)
Test #3:
score: 0
Accepted
time: 62ms
memory: 3992kb
input:
10000 9 6 ?B?W?W WWBBWB ?WB?BW B?W?W? WW??W? B???BW ?W?WW? W?B?B? ?W?BB? 10 1 W ? ? ? ? ? ? ? B W 9 4 ???? ???? W??? ?W?B ??WW ?BW? WW?W ??W? ??W? 3 2 ?W ?B BB 2 7 ?W?BWWB ??W???W 9 9 ?BW?WWW?W BW?WBBWWW W?W????WW W??WW??WW W?BWB?B?W ??BB?WWWW W???WBW?W WWW???WWW B?WWWWWW? 8 10 W??BWWW??B ?BWBWBW?BW...
output:
21 WBWWBW WWBBWB WWBWBW BBWBWB WWBWWB BBWBBW BWBWWB WBBWBW BWWBBB 0 W B W B W B W B B W 15 WBWB BWBW WBWB BWBB WBWW BBWB WWBW WBWB BWWB 1 BW WB BB 4 BWBBWWB WBWWBBW 20 WBWBWWWBW BWBWBBWWW WBWBWWBWW WWBWWBWWW WBBWBWBBW BWBBBWWWW WBWBWBWBW WWWWBWWWW BBWWWWWWW 28 WWBBWWWBWB WBWBWBWWBW BWBWBWBWBW WBBWBW...
result:
ok ok (10000 test cases)
Test #4:
score: 0
Accepted
time: 62ms
memory: 3984kb
input:
10000 7 7 ?B??BBW ????BB? WBBB??B WW?B??? ?B??BBB BBWB??B B???BB? 10 6 W?WW?? W??W?? ?WWWW? ?WW?WW WW??W? W????? W?WW?? WW???W WWW??W ?W??W? 2 6 ?B??W? B???BB 1 8 ??BWB?W? 5 2 WB W? B? BB ?W 7 5 W???? ?WW?? ???W? WWWW? W?W?W ?W?B? W?WWB 8 5 B?WBW B??WW WWW?B WBBWB BW?WW B?W?B ??WWB BBW?B 10 4 WWWW ?...
output:
15 WBWBBBW BWBWBBW WBBBWWB WWWBWBW WBBWBBB BBWBWWB BWBWBBW 13 WBWWWB WWBWBW WWWWWB BWWWWW WWWBWB WWBWBW WBWWWB WWBWBW WWWBWW BWBWWW 4 WBWBWB BWBWBB 0 WBBWBBWB 1 WB WB BW BB WW 12 WBBWB BWWBW WBBWB WWWWB WBWBW BWBBW WBWWB 7 BBWBW BWBWW WWWBB WBBWB BWBWW BWWBB WBWWB BBWWB 9 WWWW BBWB WWBW WBWB BWWB BW...
result:
ok ok (10000 test cases)
Test #5:
score: -100
Time Limit Exceeded
input:
10000 1 1 ? 7 9 W?WB????B ?WB??B??W BBB?W?WB? WWW??WWW? WW?B??W?W ?BWW??WWW B?WW?W?WB 3 7 ??BBBB? BW?WW?? B??B?BW 1 6 ?B?WWB 7 1 W W W B ? W ? 8 8 WW??W?B? WWW????? BB??WWWW ?W???WBW BBW???WB BWBWBWW? ?W?WW??B BB?????W 10 8 WWW?W?BW WB?W?WBW WW?W?WBW WWWW?WW? WBWB?B?W BW?BW??B ??WWBWWB W?BW?BWW W?W?...