GENEVE

我还想继续玩c++

导航

NOIP2013转圈游戏

Posted on 2015-09-13 21:50  GENEVE  阅读(160)  评论(0)    收藏  举报

不得不说NOIP的水题就是牛!

题目简述:给你n个人(0 - n-1) 组成一个环,每次一起前进m步,问编号为x的人在移动了10 ^ k后,他的位置是什么

咱家还能说啥,假设我们把它拉成一个无限长的链,那么每m个长度就是一圈,所以答案就是 (x + m * 10 ^ k) % n

接下来就是快速幂了,记得要时时模就好了,轻松水过~~

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>

using namespace std;

typedef long long ll;

ll fast_power(ll,ll,ll);

int main(){
    int n,m,k,x;
    scanf("%d%d%d%d",&n,&m,&k,&x);
    ll ans = ((fast_power(10ll,k,n) * m ) % n + x) % n;
    printf("%lld\n",ans);
    return 0; 
}

ll fast_power(ll a,ll b,ll mod){
    ll ans = 1;
    while(b){
        if (b & 1)    
            ans *= a;
        ans %= mod;
        b >>= 1;
        a = a * a % mod;
    }
    return ans;
}