QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#883564#9926. Flipping PathsLuminousYTWA 1ms3584kbC++202.8kb2025-02-05 17:01:172025-02-05 17:01:24

Judging History

This is the latest submission verdict.

  • [2025-02-05 17:01:24]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3584kb
  • [2025-02-05 17:01:17]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

int main() {
    int T;
    cin >> T;
    while (T--) {
        int n, m;
        cin >> n >> m;
        vector<string> grid(n);
        for (int i = 0; i < n; ++i) cin >> grid[i];

        bool all_white = true, all_black = true;
        int black = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (grid[i][j] == 'W') all_black = false;
                else all_white = false;
                if (grid[i][j] == 'B') black++;
            }
        }

        // 如果已经全白或全黑
        if (all_white || all_black) {
            cout << "YES\n0\n";
            continue;
        }

        // 处理单行或单列的情况
        if (n == 1 || m == 1) {
            int total = n * m;
            if (total % 2 == 0) {
                // 总单元格数为偶数,只有初始全黑或全白才能通过0次操作,或者通过一次操作得到全白或全黑
                if (black == 0 || black == total) {
                    cout << "YES\n0\n";
                } else if (total - black == 0 || total - black == total) {
                    // 一次操作可以翻转所有单元格,得到全白或全黑
                    cout << "YES\n1\n";
                    if (n == 1) {
                        cout << string(m - 1, 'R') << '\n';
                    } else {
                        cout << string(n - 1, 'D') << '\n';
                    }
                } else {
                    cout << "NO\n";
                }
            } else {
                // 总单元格数为奇数,只有初始全白或全黑,或者一次操作后全白或全黑
                if (black == 0 || black == total) {
                    cout << "YES\n0\n";
                } else {
                    // 检查一次操作是否可以转为全白或全黑
                    if (total - black == 0) {
                        cout << "YES\n1\n";
                        if (n == 1) cout << string(m - 1, 'R') << '\n';
                        else cout << string(n - 1, 'D') << '\n';
                    } else if (total - black == total) {
                        cout << "YES\n1\n";
                        if (n == 1) cout << string(m - 1, 'R') << '\n';
                        else cout << string(n - 1, 'D') << '\n';
                    } else {
                        cout << "NO\n";
                    }
                }
            }
            continue;
        }

        // 处理行和列都大于1的情况,构造两条路径
        string path1 = string(m - 1, 'R') + string(n - 1, 'D');
        string path2 = string(n - 1, 'D') + string(m - 1, 'R');
        cout << "YES\n2\n";
        cout << path1 << '\n' << path2 << '\n';
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4
3 3
WBB
BWB
BBW
1 5
WWWWW
2 2
BB
BB
4 1
W
B
B
W

output:

YES
2
RRDD
DDRR
YES
0
YES
0
NO

result:

ok ok (4 test cases)

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 3584kb

input:

323
1 2
BB
1 2
BW
1 2
WB
1 2
WW
2 1
B
B
2 1
B
W
2 1
W
B
2 1
W
W
1 3
BBB
1 3
BBW
1 3
BWB
1 3
BWW
1 3
WBB
1 3
WBW
1 3
WWB
1 3
WWW
2 2
BB
BB
2 2
BB
BW
2 2
BB
WB
2 2
BB
WW
2 2
BW
BB
2 2
BW
BW
2 2
BW
WB
2 2
BW
WW
2 2
WB
BB
2 2
WB
BW
2 2
WB
WB
2 2
WB
WW
2 2
WW
BB
2 2
WW
BW
2 2
WW
WB
2 2
WW
WW
3 1
B
B
B
3 ...

output:

YES
0
NO
NO
YES
0
YES
0
NO
NO
YES
0
YES
0
NO
NO
NO
NO
NO
NO
YES
0
YES
0
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
2
RD
DR
YES
0
YES
0
NO
NO
NO
NO
NO
NO
YES
0
YES
0
NO
NO
NO
NO
NO
NO
...

result:

wrong answer cell (1,2) contains different color with (1,1) after all ops. (test case 18)