POJ 2965

  • 一个开关按偶数次等于没有改变状态,只有奇数次才会改变状态

如果把一个关闭的开关及其所在列和所在行的开关全部按一遍,因为是\(4\times 4\) 的网格,每个开关在行或者列就会被影响偶数次,等于没有改变他的状态,只有当前的开关会被改变状态,因为当前的开关被周围影响了\(6\) 次,自己再按一次,正好改变了状态。

我们对每一个关闭的开关都执行一次这种操作,最后图中剩余的\(1\) 就是不可避免的操作次数(没有被这个过程抵消掉的操作次数)

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int N = 6;
int g[N][N];
int main() {
    char ch;
    int ans = 0;
    for(int i = 0;i < 4; ++i) {
        for(int j = 0;j < 4; ++j) {
            cin >> ch;
            if(ch == '+') {
                g[i][j] ^= 1;
                for(int k = 0;k < 4; ++k) {
                    g[i][k] ^= 1;
                    g[k][j] ^= 1;
                }
            }
        }
    }
    for(int i = 0;i < 4; ++i) {
        for(int j = 0;j < 4; ++j) {
            if(g[i][j]) ans ++;
        }
    }
    cout << ans << endl;
    for(int i = 0;i < 4; ++i) {
        for(int j = 0;j < 4; ++j) {
            if(g[i][j]) cout << i + 1 <<' ' << j + 1 << endl;
        }
    }
    return 0;
}

参考

fzl

posted @ 2020-07-19 01:33  南风--  阅读(57)  评论(0编辑  收藏  举报