其他分享
首页 > 其他分享> > Codeforces Round #639 (Div. 1)

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