题解 CF275A 【Lights Out】
引领天下
2020-02-19 07:44:07
来一发比较简单的题解。
由于每个格子只有 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]);//取非输出
}
```