题解 CF275A 【Lights Out】

引领天下

2020-02-19 07:44:07

Solution

来一发比较简单的题解。 由于每个格子只有 0 和 1 两种状态,所以我们完全可以开一个 bool 数组模拟,每次操作即为取非。 然后由于一个数连续取非两次相当于没取,所以我们只用考虑奇数次的操作。 至于越界的问题,我们与其去写一堆 if 进行判断,不如直接数组开大一点,让他自然越界呗。 代码: ```cpp #include<bits/stdc++.h> using namespace std; bool a[5][5];//数组开大一点,就能避免越界 //全局数组初始全 0 ,并不影响。到时候输出的时候统一取非一下就可以了。 int x; int main(){ for (int i=1;i<=3;i++) for (int j=1;j<=3;j++){ scanf("%d",&x); if(x&1)a[i-1][j]=!a[i-1][j],a[i][j-1]=!a[i][j-1],a[i+1][j]=!a[i+1][j],a[i][j+1]=!a[i][j+1],a[i][j]=!a[i][j];//如果是奇数,按题面模拟 } for (int i=1;i<=3;i++,puts("")) for (int j=1;j<=3;j++)printf("%d",!a[i][j]);//取非输出 } ```