不得不说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; }
原文:http://www.cnblogs.com/GENEVE/p/4805693.html