P1965 转圈游戏

很容易可以得到,答案应该是(x+m*10^k)%n
很显然,用O(n)一定会卡爆,所以用快速幂来算,或者找一下循环节也是可以的。

#include <bits/stdc++.h>
using namespace std;
int Fact(int x, int n, int mod) {
    int ans = 1;
    while(n) {
        if(n & 1) ans = ans * x % mod;
        x = x * x % mod;
        n >>= 1;
    }
    return ans;
}
int main(int argc, char const *argv[])
{
    int n, m, k, x;
    cin >> n >> m >> k >> x;
    cout << ((x%n) + ((m%n)*Fact(10, k, n))%n)%n;
    return 0;
}

posted on 2016-10-30 15:39  蒟蒻konjac  阅读(170)  评论(0编辑  收藏  举报