QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#276300 | #5071. Check Pattern is Good | rageOfThunder | WA | 173ms | 4488kb | C++14 | 3.9kb | 2023-12-05 19:32:22 | 2023-12-05 19:32:22 |
Judging History
answer
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops")
// MagicDark
#include <bits/stdc++.h>
#define debug cerr << "[" << __LINE__ << "] "
#define SZ(x) (int) x.size() - 1
#define all(x) x.begin(), x.end()
#define ms(x, y) memset(x, y, sizeof x)
#define F(i, x, y) for (int i = (x); i <= (y); i++)
#define DF(i, x, y) for (int i = (x); i >= (y); i--)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
template <typename T> inline void chkmax(T &x, T y) {x = max(x, y);}
template <typename T> inline void chkmin(T &x, T y) {x = min(x, y);}
template <typename T> inline void read(T &x) {
x = 0; int f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;
for (; isdigit(c); c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
x *= f;
}
const int NN = 110;
int n, m;
char ch[NN][NN];
const int N = 4e4 + 10;
struct edge {
int to, flow;
unsigned pos;
};
vector <edge> a[N];
void add(int x, int y, int flow) {
a[x].push_back((edge) { y, flow, (unsigned) a[y].size() });
a[y].push_back((edge) { x, 0, (unsigned) a[x].size() - 1 });
}
int dep[N];
unsigned cur[N];
queue <int> q;
bool bfs(int s, int t) {
F(i, s, t) dep[i] = 0;
dep[s] = 1;
q.push(s);
while (q.size()) {
int x = q.front(); q.pop();
for (edge i: a[x])
if (i.flow && !dep[i.to]) {
dep[i.to] = dep[x] + 1;
q.push(i.to);
}
}
return dep[t];
}
int dfs(int x, int tt, int lim) {
if (x == tt) return lim;
int ans = 0, t;
for (unsigned &i = cur[x]; i < a[x].size(); ++i)
if (a[x][i].flow && dep[a[x][i].to] == dep[x] + 1 && (t = dfs(a[x][i].to, tt, min(lim, a[x][i].flow)))) {
a[x][i].flow -= t, a[a[x][i].to][a[x][i].pos].flow += t;
lim -= t, ans += t;
if (!lim) return ans;
}
return ans;
}
ll dinic(int s, int t) {
ll ans = 0;
while (bfs(s, t)) {
F(i, s, t) cur[i] = 0;
ans += dfs(s, t, 1e9);
} return ans;
}
ll ans;
int id(int x, int y) {
return (x - 1) * m + y;
}
void zhk() {
cin >> n >> m;
int s = 0, t = n * m * 3 + 1;
F(i, s, t) a[i].clear();
ans = 0;
F(i, 1, n)
F(j, 1, m) {
cin >> ch[i][j];
if ((i + j) & 1) {
if (ch[i][j] == 'W') ch[i][j] = 'B';
else if (ch[i][j] == 'B') ch[i][j] = 'W';
}
// if (ch[i][j] == 'W') {
// add(s, id(i, j), 1e9);
// }
// if (ch[i][j] == 'B') {
// add(id(i, j), t, 1e9);
// }
if (ch[i][j] == '?') {
add(s, id(i, j), 1e9);
add(id(i, j), t, 1e9);
ans += 1e9;
}
}
F(i, 1, n - 1)
F(j, 1, m - 1) {
if (ch[i][j] != 'B' && ch[i + 1][j] != 'B' && ch[i][j + 1] != 'B' && ch[i + 1][j + 1] != 'B') {
ans++;
add(s, n * m + id(i, j), 1);
add(n * m + id(i, j), id(i, j), 1e9);
add(n * m + id(i, j), id(i, j + 1), 1e9);
add(n * m + id(i, j), id(i + 1, j), 1e9);
add(n * m + id(i, j), id(i + 1, j + 1), 1e9);
}
if (ch[i][j] != 'W' && ch[i + 1][j] != 'W' && ch[i][j + 1] != 'W' && ch[i + 1][j + 1] != 'W') {
ans++;
if (ch[i][j] != 'B' && ch[i + 1][j] != 'B' && ch[i][j + 1] != 'B' && ch[i + 1][j + 1] != 'B') add(id(i, j), n * m * 2 + id(i, j), 1e9);
add(id(i, j + 1), n * m * 2 + id(i, j), 1e9);
add(id(i + 1, j), n * m * 2 + id(i, j), 1e9);
add(id(i + 1, j + 1), n * m * 2 + id(i, j), 1e9);
add(n * m * 2 + id(i, j), t, 1);
}
}
cout << ans - dinic(s, t) << '\n';
F(i, 1, n) {
F(j, 1, m) {
char ch;
if (::ch[i][j] == '?') {
if (dep[id(i, j)]) ch = 'W';
else ch = 'B';
} else ch = ::ch[i][j];
if ((i + j) & 1) {
if (ch == 'W') ch = 'B';
else ch = 'W';
}
cout << ch;
}
cout << '\n';
}
}
signed main() {
cin.tie(0) -> sync_with_stdio(0);
int _ = 1;
cin >> _;
while (_--) zhk();
return 0;
}
/* why?
*/
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 4448kb
input:
3 2 2 ?? ?? 3 3 BW? W?B ?BW 3 3 BW? W?W ?W?
output:
1 BW WB 1 BWB WBB BBW 4 BWB WBW BWB
result:
ok ok (3 test cases)
Test #2:
score: -100
Wrong Answer
time: 173ms
memory: 4488kb
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 WB 10 WBBBWWB WBWBWWW BWBBWWB WBWWBWW BBWBBWB WWBWWWW BWBWBWB WWWWBBW BBWBBWW BBWBWBB 6 BWWBWWB WBBWWWB BWWBBBW BBBWBBB 0 B W B B B W W W B W 15 BWWW WBWB WWWB WBBW BWWB BWBW WBWB BWBW WBWW BWBW 8 WBW WWB WBW BWB WBW WBW BWB WWW 0 W B B W 1 BBWB WWBB 3 B...
result:
wrong answer There are 9 check pattern in you output, but you answered 10 (test case 3)