Codeforces Round #639 (Div. 1)
作者:互联网
https://codeforces.com/contest/1344/
可能是因为大家都unrate之后弃坑了,导致AB题过得快的我假装可以加分。
A - Hilbert's Hotel
题意:有无穷个房间,无穷个整数(包括负整数和零),每个整数正好对应一个房间(大小为 \(i\) 的整数恰好在编号为 \(i\) 的房间)。现在设计一种规则让这些整数调换房间,问调换房间之后是否仍然是“每个整数正好对应一个房间”?
这种规则是:输入一个 \(n\) 个数的数组 \(a\) ,然后大小为 \(i\) 的整数会被传送去 \(i+a_{k \mod n}\) 。
题解:看了一下样例好像只需要验证输入的数组 \(a\) 恰好是 \([0,n-1]\) 就可以了。简单想了一下确实是这样,只需要每 \(n\) 个数一组进行组内轮换就可以。
排序,去重,然后看看是不是刚好有 \(n\) 个。
int a[200005];
void TestCase() {
int n;
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
a[i] = (a[i] % n + n) % n;
a[i] = (i + a[i]) % n;
}
sort(a + 1, a + 1 + n);
int m = unique(a + 1, a + 1 + n) - (a + 1);
if(n == m)
puts("YES");
else
puts("NO");
return;
}
标签:int,639,房间,个数,Codeforces,整数,无穷,调换,Div 来源: https://www.cnblogs.com/KisekiPurin2019/p/12842346.html