[NOIP2013]转圈游戏

题目链接

emmmm2013提高组的原题。用一句话来说就是几个小朋友转圈圈爱的魔力转圈圈,一般来讲看到圈圈就是断环成链或者mod,然后这道题很明显是后者。无限制转圈根据数据的大小决定是模拟还是什么奇奇怪怪的算法。由于10k的步数,当然是快速幂。

简单推导一下可以得到删去重复走的一圈又一圈的绝对距离为 (x+m*10K%n)%n,直接套进去。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long read(){
    long long res=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        res=res*10+(ch-'0');
        ch=getchar();
    }
    return res*f;
}
long long mod;
long long n,m,k,x;
long long ksm(long long d,long long z){
    d%=mod;
    if(z==0)return 1ll;
    if(z%2){
        return (ksm(d,z/2)%mod*(ksm(d,z/2)%mod*d%mod)%mod)%mod;
    }
    else return (ksm(d,z/2)%mod*ksm(d,z/2)%mod)%mod;
}
int main(){
mod=read();m=read();k=read();x=read();
cout<<(x+m*ksm(10,k)%mod)%mod;
return 0;
}
posted @ 2019-03-23 11:50  clockwhite  阅读(542)  评论(0编辑  收藏  举报