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;
}
原文地址:https://www.cnblogs.com/gengchen/p/6013258.html