洛谷B3639 T2点亮灯笼

题目:

题目背景
请尽量在 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;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值