视频解析:AcWing 504. 转圈游戏(每日一题)_哔哩哔哩_bilibili
题意解析
题目的意思是说有一个长度为n的环,环上的每个点a[i]每一轮都可以后移m位,一共有轮,问给定一个环上点x,求x在经过轮之后在哪个位置?
思想
x一轮可以走到m个位置,一共有轮,那么就要走这么远。又因为题目给定的是一个环,走完n之后就又走到0了,因此我们还需要对n取模。那么我们最终可以用来表示x经过轮之后在哪个位置。
因为是,非常大,如果用循环来求的话复杂度就已经超时了。因此我们可以用快速幂来降复杂度。
code
#include<bits/stdc++.h>
using namespace std;
int x,k,m,n;
int qmi(int a,int b,int p)
{
int res=1;
while(b) //指数为0就退出循环
{
if(b&1)res=res*a%p; //指数对应位是1就计进结果里
b>>=1; //指数右移
a=a*a%p; //底数倍增
}
return res;
}
int main()
{
cin>>n>>m>>k>>x;
cout<<(x+qmi(10,k,n)*m)%n;
}