专栏文章

题解:P14319 「ALFR Round 11」C1 开关灯 (switch) (ez ver.)

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

文章操作

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

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

解题思路

先对整个区间 [1,n][1,n] 进行操作 11(翻转)和操作 22(查询),此时分为两种情况:
  1. 所有灯全亮。
  2. 只有 11 个灯不亮;
对于第一种情况,再次进行全局翻转。
由于坏灯不会连续两次翻转,必定只有 11 个灯亮,这样就转换为类似第二种情况。
此时有且仅有 11 个灯亮或不亮,通过二分查询即可定位。
最多需要 3+log2500=3+9=123+\lceil\log_2 500\rceil=3+9=12 次操作。

参考代码

CPP
#include <bits/stdc++.h>
using namespace std;

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		cout<<1<<' '<<1<<' '<<n<<endl;
		cout<<2<<' '<<1<<' '<<n<<endl;
		int k;
		cin>>k;
		if(k==n)cout<<1<<' '<<1<<' '<<n<<endl;
		int l=1,r=n;
		while(l<r)
		{
			int mid=l+r>>1;
			cout<<2<<' '<<l<<' '<<mid<<endl;
			int t;
			cin>>t;
			if(k==n?t>0:t<mid-l+1)r=mid;
			else l=mid+1;
		}
		cout<<3<<' '<<l<<endl;
	}
	return 0;
}

评论

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

正在加载评论...