QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#605052#8816. Solar Panel Grid Optimizationucup-team173WA 0ms3580kbC++204.7kb2024-10-02 15:14:502024-10-02 15:14:51

Judging History

This is the latest submission verdict.

  • [2024-10-02 15:14:51]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3580kb
  • [2024-10-02 15:14:50]
  • Submitted

answer

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

using ll = long long;

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int n;
    cin >> n;
    vector ve(n, vector<int>(n));
    vector goal(n, vector<int>(n));
    vector<int> parity(n);
    for(int i = 0; i < n; i++) {
        string s;
        cin >> s;
        for(int j = 0; j < n; j++) {
            ve[i][j] = s[j] - '0';
        }
    }
    for(int i = 0; i < n; i++) {
        string s;
        cin >> s;
        for(int j = 0; j < n; j++) {
            goal[i][j] = s[j] - '0';
        }
    }
    vector<pair<int, int>> ans;
    auto row = [&](int i) {
        ans.push_back({0, i});
        int temp = ve[i][0];
        for(int j = 0; j < n - 1; j++) {
            ve[i][j] = ve[i][j + 1];
        }
        ve[i][n - 1] = temp;
    };
    auto col = [&](int j) {
        ans.push_back({1, j});
        int temp = ve[n - 1][j];
        for(int i = n - 1; i > 0; i--) {
            ve[i][j] = ve[i - 1][j];
        }
        ve[0][j] = temp ^ 1;
    };
    auto print = [&](vector<vector<int>> &v) {
        cerr << "-------------------\n";
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                cerr << v[i][j];
            }
            cerr << '\n';
        }
    };
    int cnt = 0;
    for(int i = 0; i < n; i++) cnt += ve[n - 1][i] + ve[i][n - 1];
    cnt -= ve[n - 1][n - 1];
    while(cnt < n) {
        while(ve[n - 1][n - 1]) row(n - 1);
        col(n - 1), cnt++;
    }
    // print(ve);
    // #1 > #0
    cnt = 0;
    for(int i = 0; i < n; i++) cnt += ve[i][n - 1];
    // cerr << cnt << '\n';
    while(cnt) {
        if(ve[n - 1][n - 1]) cnt--;
        while(ve[n - 1][n - 1] == 0) row(n - 1);
        col(n - 1);
    }
    // print(ve);
    for(int i = 0; i < n; i++) cnt += ve[n - 1][i];
    while(cnt) {
        while(ve[n - 1][n - 1] == 0) row(n - 1);
        col(n - 1), cnt--;
    }
    // print(ve);
    // all 0
    for(int i = 0; i < n; i++) col(n - 1); // n
    // cerr << ans.size() << '\n';
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            parity[i] ^= ve[i][j] ^ goal[i][j];
        }
    }
    for(int i = n - 2; i >= 0; i--) { // 2n
        if(!parity[i]) row(n - 1);
        col(n - 1);
    }
    parity.assign(n, 0);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            parity[i] ^= ve[i][j] ^ goal[i][j];
        }
    }
    assert(*max_element(parity.begin(), parity.begin() + n - 1) == 0);
    // print(ve);
    if(parity[n - 1]) { // 5n
        // cerr << "parity\n";
        for(int i = 0; i < n - 1; i++) col(n - 1), row(n - 1);
        if(n % 2 == 0) col(n - 1);
        for(int i = 0; i < n - 1; i++) row(n - 1), col(n - 1);
        for(int i = 0; i < n; i++) col(n - 1);
    }
    parity.assign(n, 0);
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < n; j++) {
            parity[i] ^= ve[i][j] ^ goal[i][j];
        }
    }
    assert(*max_element(parity.begin(), parity.begin() + n) == 0);
    // print(ve);
    for(int j = 0; j < n - 1; j++) { // 2n*(n-1) = 760
        vector<int> tmp;
        for(int i = 0; i < n; i++) {
            if(ve[i][n - 1] == goal[i][j]) row(i);
            else tmp.push_back(i);
        }
        for(int i = 0; i < n; i++) col(n - 1);
        for(int i : tmp) row(i);
        // print(ve);
    }
    if(ve[0][n - 1] != goal[0][n - 1]) {
        for(int i = 0; i < n; i++) col(n - 1);
    }
    // print(ve);
    cout << ans.size() << '\n';
    // for(auto [x, y] : ans) {
    //     if(x == 0) cout << "row " << y + 1 << '\n';
    //     else cout << "column " << y + 1 << '\n';
    // }
    return 0;
}
/*
4
0010
1011
1101
0011

0010
0011
0110
0000



20
11101100110101100111
00000000110010101111
10000100101011111100
10001100110000001101
10110111101100001101
10100111101110010100
00101011011000000011
01101101011100010010
11110011110000010001
01110111111101010101
00000100010110110100
01100001110001011111
00011101110010100110
10011100010010100011
00101110000010011101
00010011101011110001
00010111001110010110
10100100000010101101
10100101000001000111
10010111011100101100
00110010110001010000
00011011001111010001
01101011110000001011
01110100111111111100
01001100100110111101
00110101000010011101
00111001100011000010
01101110011010001010
00011101010001011111
00000101100100101001
10011111111011001111
00110001101001000011
11010001111000010010
01000010111011110101
10101101101000011111
01001101010100111100
01110110001111010010
00101001000011011011
11111101011101101110
01100111000001010111


*/

详细

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3580kb

input:

4
1011
1100
0100
1011

1001
0110
0110
1001

output:

43

result:

wrong output format Unexpected end of file - token expected