Codeforces Round 992 (Div. 2)
Codeforces Round 992 (Div. 2)
这一场打的有点崩, 感冒脑子转不动了, C都是问队友的
目录
A.Game of Division
题意
给定一个数组 a 和数字 k,两个玩家各取一个元素\(a_i\) 和 \(a_j\),若 $ \left| a_i-a_j \right| $ 是 k 的倍数,则玩家二胜利,否则玩家一胜利。
现在玩家一先选择一个 \(a_i\),能否保证玩家一胜利,若能则输出任意一个满足条件的下标 \(i\),否则输出 -1。
思路
如果 $ \left| a_i-a_j \right| $ 是 k 的倍数,则有 $ \left| a_i-a_j \right| % k = \left| a_i % k - a_j % k \right| = 0$,所以我们把所有元素对 k 取模,如果两个元素同模于 k,则说明这两对是不好的。那么我们可以想到,我们需要找的元素应满足 \(\mathbf{a_i}\) 模 k 的余数在数组中是唯一的。
C++实现
void solve() {
int n = read(), k = read();
vector<int> a(k), dex(k);
rep(i, 1, n) {
int x = read() % k;
a[x] ++;
dex[x] = i; // 记录下标,如果出现超过两次,就不用在意原本的 w[x] 是否被覆盖
}
rep(i, 0, k-1) {
if (a[i] == 1) {
puts("Yes");
write(dex[i]), enter;
return;
}
}
puts("No");
}

浙公网安备 33010602011771号