题解:P14171 【MX-X23-T1】丢手绢

· · 题解

解题思路

模拟。

把每位小朋友放手绢的位置统计一下,若有小朋友放在这个地方,则这个地方的计数器 s_i\gets s_i+1

最后,取 s 的最大值,即 maxn\gets\max\limits^n_{i=1}s_i。再遍历 s,如果 s_i=maxn,则当前小朋友的人气值最高,输出这个 i

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[1000010];
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,maxn=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        maxn=max(maxn,(++a[(i+x-1+n+n)%n+1]));
        // 注:i+x 为要放的位置,+n+n 为防止负数,(...-1)%n+1 为防止超过 n。
    }
    for(int i=1;i<=n;i++)
        if(a[i]==maxn)cout<<i<<' ';
    return 0;
}