The Preliminary Contest for ICPC Asia Nanjing 2019 ICPC徐州站网络赛E. Magic Master(数组模拟链表)

题目链接:https://nanti.jisuanke.com/t/41352

 

题目大意:第一次取第一张牌,然后不断把第一张牌放最下面连续m次,再把第一张牌取出来,要求取出来的牌从1~n

 

题目思路:其实这也是假方法,后台数据水了,O(TNM)不应该能过,但是好像题解也是这个方法???不太懂。其实就是每个数组记录的是他下一步要去的是哪一张牌,然后每次暴力跳m下即可

 

以下是代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
const int MAXN = 4e7+5;
const int MOD = 998244353;
int ans[MAXN],a[MAXN],x;
int main() {
    int t,n,m,q;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d",&n,&m,&q);
        rep(i,0,n-2){
            a[i]=i+1;
        }a[n-1]=1;
        ans[0]=0;
        int pos=1,pre;
        rep(i,1,n-1){
            rep(j,1,m){
                pre=pos;
                pos=a[pos];
            }
            ans[pos]=i;
            a[pre]=a[pos];
            pos=a[pos];
        }
        rep(i,1,q){
            scanf("%d",&x);
            printf("%d\n",ans[x-1]+1);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值