QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#276300#5071. Check Pattern is GoodrageOfThunderWA 173ms4488kbC++143.9kb2023-12-05 19:32:222023-12-05 19:32:22

Judging History

你现在查看的是最新测评结果

  • [2023-12-05 19:32:22]
  • 评测
  • 测评结果:WA
  • 用时:173ms
  • 内存:4488kb
  • [2023-12-05 19:32:22]
  • 提交

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?
*/

Details

Tip: Click on the bar to expand more detailed information

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)