专栏文章

题解:P1161 开灯

P1161题解参与者 3已保存评论 3

文章操作

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

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

题面分析:

有无限盏灯排成一行,每次将 t[i]t[i] 盏灯的开关按下。问 nn 次操作后唯一开着的灯的编号。
由于数据范围不大,因此对于每次操作可以直接模拟被改变状态的灯,开则关,关则开。最后,从 11 开始依次遍历,直至找到第一盏开着的灯为止并输出。

样例解释:

第一次操作将:1,3,4,6,8,9,11,12,14,16,17,19,211,3,4,6,8,9,11,12,14,16,17,19,21 号灯状态改变。
第二次操作将:2,5,7,10,13,15,182,5,7,10,13,15,18 号灯状态改变。
第三次操作将:1,2,3,4,5,6,7,8,,19,20,211,2,3,4,5,6,7,8,\cdots,19,20,21 号灯状态改变。
由此得出,离小明最近的一盏亮着的灯的编号为 2020

AC CODE:

CPP
#include<bits/stdc++.h>
using namespace std;
int n,s[2000005];
double a,t;
int main(){
    cin>>n;
	for(int i=1;i<=n;i++){
    	cin>>a>>t;//改变t盏灯的状态。
    	for(int j=1;j<=t;++j){
    		s[int(j*a)]=(s[int(j*a)]+1)%2;//更新为按下开关后的状态。
		}
	}for(int i=1;i<=2000000;i++){
    	if(s[i]){
    		cout<<i;//最近的一个亮着的灯。
    		return 0;
		}
	}
    return 0;//好习惯!
}
有疑问私信沟通哦!

评论

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

正在加载评论...