The Preliminary Contest for ICPC Asia Nanchang 2019 E. Magic Master

题目:https://nanti.jisuanke.com/t/41352
思路:约瑟夫环
由题意得第k张牌即求 k 为 第几个 报数为m+1 的单位
用队列模拟即可

#include
using namespace std;
int a[40000001];
int main()
{
    int T;
    scanf("%d",&T);
    int n,m,c;
    while(T--)
    {
        int t=0;
        scanf("%d%d%d",&n,&m,&c);
        a[++t]=1;    
        queue<int>q;
        for(int i=2;i<=n;i++) q.push(i);
        while(!q.empty())
        {
            int b=m;
            while(b)
            {
                q.push(q.front());
                q.pop();
                b--;
            }
            a[q.front()]=++t;
            q.pop();
        }
        int d;
        while(c--)
        {
            scanf("%d",&d);
            printf("%d\n",a[d]);
        }            
    } 
    return 0;
}

你可能感兴趣的:(The Preliminary Contest for ICPC Asia Nanchang 2019 E. Magic Master)