『题解』CodeForces CF120B Quiz League

题目传送门

题目大意

给定 \(n\) 个值为 \(0\)\(1\) 的数围成一个环,第一个数的位置是 \(1\)。给定一个数 \(k\),求从第 \(k\) 个数开始顺时针遍历整个环,第一个遇到的 \(1\) 的位置。

思路

模拟即可。

也不需要用什么队列,不用什么 % 运算,咱直接将原数组复制一遍到后面接着,然后从第 \(k\) 个数开始判断,碰到一个 \(1\) 输出就行了。

比较玄学的是,这题还要文件输入输出...所以要加上两句:

freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);

代码

#include <iostream>
using namespace std;
int n,k,a[2005]; // 由于要复制数组,所以开两倍空间

int main(){
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout); // 文件输入输出
	cin >> n >> k;
	for(int i=1; i<=n; i++){
		cin >> a[i];
		a[i+n]=a[i]; // 一边输入一边复制
	}
	while(!a[k++]); // 找第一个 1
	cout << (k-2)%n+1 << endl;
	// 找到 1 之后 k 会多一位,然后由于下标从 1 开始又多了
	// 所以要 (k-1)%n
	// (k-1)%n 之后的范围又在 [0,n-1],所以要加一,变成[1,n]。
	return 0;
}
posted @ 2022-01-29 12:47  仙山有茗  阅读(46)  评论(0)    收藏  举报