QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#290990#5071. Check Pattern is GoodMoRanSkyWA 153ms6604kbC++205.2kb2023-12-26 01:00:262023-12-26 01:00:27

Judging History

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

  • [2023-12-26 01:00:27]
  • 评测
  • 测评结果:WA
  • 用时:153ms
  • 内存:6604kb
  • [2023-12-26 01:00:26]
  • 提交

answer

// Skyqwq
#include <bits/stdc++.h>

using namespace std;

const int S = 105, N = S * S, M = N * 2 + N * 9, INF = 1e9;

int n, m;

char s[S][S];

typedef long long LL;

namespace MF{
    int n, m, s, t, pre[N], cur[N], q[N];
    LL res, maxflow, d[N];
    int head[N], numE = 1;
    struct E{
        int next, v, w;
    } e[M << 1];
    
    void inline add(int u, int v, int w) {
        e[++numE] = (E) { head[u], v, w };
        head[u] = numE;
    }
    void inline init(int v, int a, int b) {
        for (int i = 1; i <= n; i++) head[i] = 0;
        numE = 1;
        n = v, s = a, t = b;
    }
    
    bool inline bfs() {
        int hh = 0, tt = -1;
        for (int i = 1; i <= n; i++) d[i] = 0;
        q[++tt] = s, d[s] = 1, cur[s] = head[s];
        while (hh <= tt) {
            int u = q[hh++];
            for (int i = head[u]; i; i = e[i].next) {
                int v = e[i].v;
                if (!d[v] && e[i].w) {
                    cur[v] = head[v];
                    q[++tt]= v, d[v] = d[u] + 1;
                    if (v == t) return 1;
                }
            }
        }
        return 0;
    }
    LL dinic(int u, LL flow) {
        if (u == t) return flow;
        LL rest = flow;
        for (int i = cur[u]; i && rest; i = e[i].next) {
            cur[u] = i;
            int v = e[i].v;
            if (e[i].w&& d[v] == d[u] + 1) {
                int k = dinic(v, min((LL)e[i].w, rest));
                if (!k) d[v] = 0;
                rest -= k, e[i].w -= k,e[i ^ 1].w += k;
            }
        }
        return flow - rest;
    }
    void inline addE(int u, int v, int w) {
        add(u, v, w), add(v, u, 0);
    }
    LL inline work() {
        maxflow = 0;
        while (bfs())
            while (res = dinic(s, INF)) maxflow += res;
        return maxflow; 
    }
    // Find min-cut 
    bool vis[N];
    
    void dfs(int u) {
        //cerr << u << " dfs\n";
        vis[u] = 1;
        for (int i = head[u]; i; i = e[i].next) {
            int v = e[i].v;
            if (!vis[v] && e[i].w) dfs(v);
        }
    }
    
    void minCut() {
        for (int i = 1; i <= n; i++) vis[i] = 0;
        dfs(s);
    }
}

int id[S][S][2], idx;

char c[2] = {'W' , 'B'};

bool chk(char cr, char y) {
    return y == '?' || cr == y;
}

bool inline chk(int x, int y, int w) {
    char cr = c[w];
    return chk(cr, s[x][y]) && chk(cr, s[x][y - 1]) && chk(cr, s[x - 1][y]) && chk(cr, s[x - 1][y - 1]);
}

void clr() {
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) id[i][j][0] = id[i][j][1] = 0;
    idx = 0;
}

void fl(int x, int y, int z) {

    for (int i = x - 1; i <= x; i++)
        for (int j = y - 1; j <= y; j++) {
            if (s[i][j] != '?' && s[i][j] != c[z]) assert(false);
            s[i][j] = c[z];
        }
}

int main() {
    int T; scanf("%d", &T);
    while (T--) {
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i++) {
            scanf("%s", s[i] + 1);
            for (int j = 1; j <= m; j++) {
                if ((i + j) & 1) {
                    if (s[i][j] == 'W') s[i][j] = 'B';
                    else if (s[i][j] == 'B') s[i][j] = 'W';
                }
            }
        }

        // for (int i = 1; i <= n; i++) {
        //     for (int j = 1; j <= m; j++) {
        //         cout << s[i][j];
        //     }
        //     cout << endl;
        // }

        for (int i = 2; i <= n; i++) {
            for (int j = 2; j <= m; j++) {
                for (int z = 0; z < 2; z++) {
                    if (chk(i, j, z))
                        id[i][j][z] = ++idx;                        
                }
            }
        }
        int ans = idx;
        // cout << ans << endl;
        int st = ++idx, t = ++idx;
        MF::init(idx, st, t);
        for (int i = 2; i <= n; i++) {
            for (int j = 2; j <= m; j++) {
                if (id[i][j][0]) {
                    MF::addE(st, id[i][j][0], 1);
                    for (int x = max(i - 1, 2); x <= min(i + 1, n); x++) {
                        for (int y = max(j - 1, 2); y <= min(j + 1, m); y++) {
                            if (id[x][y][1])
                                MF::addE(id[i][j][0], id[x][y][1], INF);
                        }
                    }
                } 
                if (id[i][j][1]) {
                    MF::addE(id[i][j][1], t, 1);
                }
            }
        }
        ans -= MF::work();
        MF::minCut();
        printf("%d\n", ans);
        

        for (int i = 2; i <= n; i++) {
            for (int j = 2; j <= m; j++) {
                if (id[i][j][0] && MF::vis[id[i][j][0]])
                    fl(i, j, 0);
                if (id[i][j][1] && !MF::vis[id[i][j][1]])
                    fl(i, j, 1);   
            }
        }

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (s[i][j] == '?') s[i][j] = 'W';

                int t = s[i][j];
                if ((i + j) & 1) t = t == 'W' ? 'B' : 'W';
                putchar(t); 
            }
            puts("");
        }
        clr();
    }
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3880kb

input:

3
2 2
??
??
3 3
BW?
W?B
?BW
3 3
BW?
W?W
?W?

output:

1
BW
WB
1
BWW
WBB
WBW
4
BWB
WBW
BWB

result:

ok ok (3 test cases)

Test #2:

score: 0
Accepted
time: 27ms
memory: 3848kb

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
WBWBWWW
BWBBWWB
WBWWBWB
BBWBBWB
WWBBWWB
BWBWBWB
WWWWBBW
BBWBBWW
BWWWWBB
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
WBW
BWB
BWB
0
W
B
W
B
1
WBWB
WWBB
3
BW...

result:

ok ok (10000 test cases)

Test #3:

score: 0
Accepted
time: 27ms
memory: 3956kb

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
WBWBBWBWW
WWBWWBWWW
WBBWBWBBW
BWBBWWWWW
WBWBWBWBW
WWWWBWWWW
BBWWWWWWW
28
WWBBWWWBWB
WBWBWBWBBW
BWBWBWBWBW
WBWWBW...

result:

ok ok (10000 test cases)

Test #4:

score: 0
Accepted
time: 27ms
memory: 3940kb

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
WBBBBWB
WWWBWBW
WBBWBBB
BBWBWWB
BWBWBBW
13
WBWWWB
WBBWBW
BWWWWB
BWWBWW
WWBWWB
WBWBWB
WBWWBW
WWBBWW
WWWWBW
BWBBWB
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
BBWBB
WBWWB
BBWWB
9
WWWW
BBWB
WWBW
WBWB
BWWB
BW...

result:

ok ok (10000 test cases)

Test #5:

score: 0
Accepted
time: 28ms
memory: 3916kb

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?...

output:

0
W
18
WBWBWWBWB
BWBWBBWBW
BBBBWBWBW
WWWWBWWWB
WWBBWBWBW
WBWWWBWWW
BWWWBWBWB
5
WBBBBBW
BWBWWWB
BBWBWBW
0
WBWWWB
0
W
W
W
B
W
W
W
23
WWWBWWBW
WWWWBBWB
BBWBWWWW
BWBWBWBW
BBWBWBWB
BWBWBWWW
WWBWWBWB
BBWBBWBW
19
WWWBWBBW
WBWWBWBW
WWBWWWBW
WWWWBWWB
WBWBWBBW
BWBBWBWB
WBWWBWWB
WWBWWBWW
WBWBWWWB
WWWWBBBB
0
WB...

result:

ok ok (10000 test cases)

Test #6:

score: 0
Accepted
time: 27ms
memory: 3872kb

input:

10000
9 1
W
B
?
B
W
W
?
W
B
1 10
W??????BWB
5 8
??W??WB?
?B?WWB?W
??????B?
BB??BBBB
WB??BBB?
6 2
?B
??
WB
?B
WW
W?
1 10
WW??BW?BW?
4 3
BW?
???
B?B
??W
10 10
WW?BBW?BW?
WW?BW?????
?WWBW?WB?W
???B?BBBBB
??BBBB?BBW
?WW??W?WBB
W??BB?WBBB
BBWBW?WBBW
?W????BWB?
??BW??WBWB
1 6
??B???
6 5
WBB?W
?WWWW
WWWW?
...

output:

0
W
B
W
B
W
W
W
W
B
0
WBWBWBWBWB
10
BWWBBWBB
WBWWWBWW
BWBWBWBB
BBWBBBBB
WBBWBBBB
2
WB
BW
WB
BB
WW
WW
0
WWWBBWWBWB
6
BWB
WBW
BWB
WBW
26
WWWBBWWBWB
WWBBWBBWBW
BWWBWBWBWW
WBWBBBBBBB
BWBBBBWBBW
BWWWBWBWBB
WWBBBWWBBB
BBWBWBWBBW
BWBWBWBWBW
WBBWWBWBWB
0
WBBBWB
4
WBBBW
BWWWW
WWWWB
WWWBW
WWBBW
WBWWB
0
B
B
B
...

result:

ok ok (10000 test cases)

Test #7:

score: 0
Accepted
time: 81ms
memory: 3880kb

input:

10000
10 10
?W?WW?W??W
?BWBW?BBWW
?BB?WWW?W?
W?B?WWWWWW
?BWW?WWW?W
BWWWWWWW?W
WBBWW??B??
W??WW?W??W
WWWW?WW?W?
?W?BWW?WW?
10 10
WB?WBBWWWB
?WWWW?WB??
?B?BWW?BW?
WBWBW??W?W
B?WB?WBWWB
WWBWBBWW??
??WBBWBWBW
WWB??WWBWB
B?BWWWWBWW
WW?WWWBWWB
10 10
??W????WW?
?WW?W???W?
??W??WW?W?
WW??WW?WW?
?W??WW?WW?
?...

output:

20
BWBWWBWWBW
WBWBWWBBWW
WBBWWWWBWB
WWBBWWWWWW
WBWWBWWWWW
BWWWWWWWBW
WBBWWWBBWB
WWBWWBWWBW
WWWWBWWBWB
BWBBWWBWWW
24
WBWWBBWWWB
BWWWWBWBBW
WBWBWWBBWB
WBWBWBWWBW
BWWBBWBWWB
WWBWBBWWWB
WBWBBWBWBW
WWBWBWWBWB
BBBWWWWBWW
WWBWWWBWWB
33
WBWWBWBWWB
BWWBWBWBWW
WBWWBWWBWB
WWBBWWBWWW
WWWBWWWWWB
BWWWBWWWBW
BWBBW...

result:

ok ok (10000 test cases)

Test #8:

score: 0
Accepted
time: 81ms
memory: 3988kb

input:

10000
10 10
?BBBBWBBB?
??W???WB??
BB?W???BB?
?B???BBB??
W??BB?WBBB
?B?B???W?W
?????BB???
?BW???B???
???BBB??BB
BWBBBBBBB?
10 10
BWW?WWB?BW
??B?WBBBWB
B??BB??BWB
BW?BWB???W
?WB?WWW?W?
B??B??W?BB
?WBB?WBB?B
BB??BBWBW?
WB??WBB?BW
?B???B?W??
10 10
??WWWB??BB
?WW???WBWW
???W??W?WW
?W?B?W?W??
WWB?WBB??W
B...

output:

34
WBBBBWBBBW
BWWBWBWBWB
BBBWBWBBBW
BBWBWBBBWB
WWBBBWWBBB
WBWBWBBWBW
BWBWBBBBWB
WBWBWWBWBW
BWBBBBWBBB
BWBBBBBBBW
31
BWWBWWBWBW
WBBWWBBBWB
BWWBBWWBWB
BWWBWBBWBW
WWBWWWWBWB
BBWBWBWWBB
WWBBBWBBWB
BBWWBBWBWB
WBWBWBBWBW
BBBWBBBWWB
33
WBWWWBBWBB
BWWBBWWBWW
WBBWWBWBWW
BWWBBWBWBW
WWBWWBBBWW
BBWBWBWWWW
WWBWB...

result:

ok ok (10000 test cases)

Test #9:

score: 0
Accepted
time: 11ms
memory: 3912kb

input:

10000
1 100
WWW?BWB?BB?BBW?BWBB?W??B?B?BWWBWB?WWB??BBBBB??BBBBB?BBBWBWWW?B?BBBWW??BBBW???B???W??W??BW?B?B?W??WB?
1 100
?WBW?WB?BBBB?BWBWB???WWB?BBB?BBW?B?B??W?B??BBW??WBBW???WW?BBBB?WWB?WBB???WBBB?BBW?W??BW?B??BBBBBBBWB
1 100
W?????BBB?BB?BB?????BWWWB?B???BB??????B??BWW???B??B?B???????BBB??B?BBB???B...

output:

0
WWWBBWBBBBWBBWWBWBBBWBWBWBWBWWBWBBWWBBWBBBBBWBBBBBBBBBBWBWWWWBWBBBWWWBBBBWWBWBWBWWWBWBWBWBBBBBWBWWBB
0
WWBWWWBBBBBBWBWBWBWBWWWBWBBBWBBWWBWBWBWBBBWBBWWBWBBWWBWWWBBBBBWWWBWWBBWBWWBBBBBBWBWBWBWBBBWBBBBBBBWB
0
WBWBWBBBBBBBWBBBWBWBBWWWBBBBWBBBWBWBWBBBWBWWWBWBWBBBBBWBWBWBBBBBWBWBBBWBWBBBWWWBWBWWWBWBWBWB...

result:

ok ok (10000 test cases)

Test #10:

score: 0
Accepted
time: 55ms
memory: 3904kb

input:

10000
100 1
W
B
B
?
B
B
B
?
B
B
B
B
W
B
B
B
?
?
B
?
B
B
?
W
B
W
?
B
?
B
W
W
?
W
?
B
?
B
B
?
W
W
B
?
B
B
?
?
W
W
B
B
?
B
B
?
B
?
?
?
W
B
W
B
?
B
W
?
?
B
B
B
B
?
B
?
W
B
B
W
B
?
W
B
B
?
B
B
?
B
?
W
?
B
?
B
B
?
B
W
100 1
?
W
?
W
?
W
W
W
W
W
B
W
?
?
B
B
?
W
?
B
W
W
W
W
?
?
?
?
W
W
B
W
W
W
W
W
?
W
W
W
?
...

output:

0
W
B
B
B
B
B
B
B
B
B
B
B
W
B
B
B
W
B
B
B
B
B
W
W
B
W
W
B
W
B
W
W
W
W
W
B
W
B
B
B
W
W
B
B
B
B
W
B
W
W
B
B
W
B
B
B
B
B
W
B
W
B
W
B
W
B
W
B
W
B
B
B
B
B
B
B
W
B
B
W
B
B
W
B
B
B
B
B
W
B
W
W
W
B
W
B
B
B
B
W
0
W
W
W
W
W
W
W
W
W
W
B
W
W
B
B
B
W
W
W
B
W
W
W
W
W
B
W
B
W
W
B
W
W
W
W
W
W
W
W
W
W
W
B
W
W
B
W
B
...

result:

ok ok (10000 test cases)

Test #11:

score: 0
Accepted
time: 105ms
memory: 4180kb

input:

1000
100 10
WWWB?WWW?W
W????????W
WB?W??WW?W
WBB?WWW??B
?WWWW?WW?W
?WWWW?W?WB
?B??W?W???
WW?W?BWWW?
WW?B?W?W?W
????WW??W?
BWB??WWWW?
W??W??WW??
W?WBB??WWW
?WWBBWW?WW
?WBWW?B???
???WWW???W
??WW?WWW??
????W?BW?W
???W?W?W?W
?WW?WW?WB?
BW??WW?WW?
WB?WWWWW?W
??BWW??W?W
W??B?WWWW?
WWW?W??WWW
BBBW??W?W?
??...

output:

335
WWWBBWWWBW
WWWBWBBBWW
WBBWBWWWBW
WBBBWWWBWB
BWWWWBWWBW
BWWWWWWBWB
WBWBWBWWBW
WWBWBBWWWB
WWBBWWBWBW
WBWBWWWBWB
BWBWBWWWWB
WBWWWBWWBW
WBWBBWBWWW
BWWBBWWBWW
BWBWWBBWBB
WBWWWWWBWW
BWWWBWWWBB
WBWBWBBWBW
BWBWBWWWWW
BWWBWWBWBW
BWBWWWWWWB
WBWWWWWWBW
BWBWWBWWBW
WBWBBWWWWB
WWWBWWBWWW
BBBWBBWBWB
WBWBWWBWBW...

result:

ok ok (1000 test cases)

Test #12:

score: 0
Accepted
time: 105ms
memory: 4156kb

input:

1000
10 100
BBWB??W??B?BWB?BBB??WWWW?B???WBB??WW???WWBW?B??W??BW?BWBBBW?BWBW?WBW?B?WWB??B?B?BBWWWBBBBW?BB???B?WB
??????WWWBWBBB??W??WW??BWBW??W??????WWWB?B??B?????W?B?????W??BBBBWBW??BWWWB???WBWB?BB?WW?B????W?WWB?
WB?BBBW?B??BB?WWW?B??WBB??W?BBW??BB??BB???BB??B??WB??W?B?B?WWWWW?BB??W?W?WBB??B?WWBBB?...

output:

330
BBWBWBWBWBWBWBWBBBWBWWWWBBBWBWBBWBWWBBBWWBWBBWBWBWBWWBWBBBWWBWBWWWBWWBWWWBWWBWBWBBWWWBBBBWWBBWBWBBWB
BWBWBWWWWBWBBBBWWWBWWBWBWBWBWWBWBWBBWWWBWBWWBBWBWBWBBWBWBWWBWBBBBWBWBWBWWWBBWBWBWBWBBBWWWBBWWBWBWWBW
WBWBBBWBBWBBBBWWWBBWBWBBBWWWBBWBWBBBWBBWBWBBWWBWBWBWBWBBWBBWWWWWBBBBWWWWBWBBBWBWWWBBBWBWWBWBWW...

result:

ok ok (1000 test cases)

Test #13:

score: -100
Wrong Answer
time: 153ms
memory: 6604kb

input:

100
100 100
?WW?WW??WWW??BBW??WW??W???W?W?W?????W?W?BWBW??WBW????W??BB??BW?W??W????WBW?????WWB??BWW????W??W??WW?
B?????WW???B?BWWWB?WWW?WB?BB??????W??W?BWWW?BB??WWBWB?WWW????WW?W??BB?BBWB?W????W???BWWW??BBWWW???BW
W?BW??????WBB?B????W?BBW????BBW????W?W?????B?B??WW??????WWWWW?W??WW?WBW??W??W????BWWB?...

output:

4352
WWWBWWBBWWWWBBBWBWWWWBWBWBWBWBWWBWBWWBWWBWBWWBWBWBWBWWBBBBWBBWBWBWWBWBWWBWWBWBWWWBWBBWWBWBWWBBWWBWWB
BBWBWBWWBWBBWBWWWBWWWWBWBWBBWWBBWBWBWWBBWWWBBBWBWWBWBBWWWWBWBWWBWBBBBWBBWBBWBWBWWWBWBWWWBWBBWWWBWBBW
WWBWBWBWWBWBBWBWBWBWWBBWWBWWBBWWBWBWBWWBWBWBWBBWWWWWBWBWWWWWWBWWBWWBWBWWBWWBWBWBWBWWBWWBBBWBW...

result:

wrong answer Integer parameter [name=ans] equals to 13523, violates the range [0, 10000] (test case 81)