题目:
题目背景
请尽量在 20min 之内写完题目。这是指「写代码」的时间;「读题」时间不计算在内。
题目描述
有 nn 个灯笼环形摆放。最开始,这些灯笼都是关闭的状态。
操作台上有 nn 个按钮,按下第 xx 个按钮时,会反转灯笼 xx 以及相邻两个灯笼的状态。「反转」是指关闭变成点亮、点亮变成关闭。
举一个例子:如果按下第 55 个按钮,则 44、55、66 号灯笼都会反转;如果按下第 nn 个按钮,则 n-1, n, 1n−1,n,1 这三个灯笼状态反转。这是因为灯笼放置为环形,n-1n−1 和 11 是与 nn 相邻的灯笼。
我们依次按下了一些按钮。你需要编程求出当我们的操作完成后,最终这些灯笼的状态。
输入格式
第一行,两个正整数 n, mn,m,分别表示共有 nn 个灯笼、我们按了 mm 次按钮。
接下来 mm 行,每行一个正整数,表示我们在那一次操作中按下了哪个按钮。
#include<bits/stdc++.h>
using namespace std;
bool a[1000];
int main() {
int n,m,x;
cin >> n >> m;
for (int i=0;i<=n;i++) a[i]=0;
while(m--){
cin>>x;
if(x==n){
a[1] = 1 - a[1];
a[n] = 1 - a[n];
a[2] = 1 - a[2];
}else{
a[x-1] = 1 - a[x-1];
a[x] = 1 - a[x];
a[x+1] = 1 - a[x+1];
}
}
for(int i = 1;i<=n;i++) cout<<a[i]<<" ";
return 0;
}