专栏文章

题解:P1161 开灯

P1161题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip4zpy4
此快照首次捕获于
2025/12/03 06:15
3 个月前
此快照最后确认于
2025/12/03 06:15
3 个月前
查看原文

题意

nn 次操作,每次操作给出一个实数 aa 和一个整数 tt。对于第 ii 个操作,我们需要将 a×ia\times i(向下取整)位置的灯的状态进行切换(开变关,关变开)。最后,需要找出最终仍然亮着的灯中编号最小的那个。

分析

我们可以用一个 boolbool 类型数组 lightlight 来记录每个灯的状态,初始时所有灯都是关闭状态,赋值为 00
对于每个操作,我们需要处理从 11tt 的所有 ii 值,计算每个 ii 对应的灯编号后切换该灯的状态(如果是开就变关,关就变开)。
最后,在所有操作完成后,遍历 lightlight 数组,找到第一个状态为开(赋值为 11)的灯,输出其编号即可。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
bool light[2000005];
int main(){
	double a;
	int n,t;
	
	cin>>n;
	while(n--){
		cin>>a>>t;
		for(int i=1;i<=t;i++){
			int b=a*i;
			if(light[b]==1){
				light[b]=0;
			}else{
				light[b]=1;
			}
		}
	}
	for(int i=1;i<=2000000;i++){
		if(light[i]==1){
			cout<<i;
			break;
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...