转圈游戏 NOIP2013提高组

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏。按照顺时针方向给 n 个位置编号,从0 到 n-1。最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,…,依此类推。
  游戏规则如下:每一轮第 0 号位置上的小伙伴顺时针走到第 m 号位置,第 1 号位置小 伙伴走到第 m+1 号位置,…,依此类推,第n − m号位置上的小伙伴走到第 0 号位置,第 n-m+1 号位置上的小伙伴走到第 1 号位置,…,第 n-1 号位置上的小伙伴顺时针走到第 m-1 号位置。
  现在,一共进行了 10k 轮,请问 x 号小伙伴最后走到了第几号位置。

输入格式

输入共 1 行,包含 4 个整数 n、m、k、x,每两个整数之间用一个空格隔开。

输出格式

输出共 1 行,包含 1 个整数,表示 10k 轮后 x 号小伙伴所在的位置编号。

样例输入

10 3 4 5

样例输出

5

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,k,x;
long long int a=10;
int main(){
	cin>>n>>m>>k>>x;
	int ans=1%n;
	for(;k;k>>=1){
		if(k&1) ans=(long long) ans*a%n;
		a=(long long)a*a%n;
	}
	for(int i=0;i<ans;i++){
		x=(x+m)%n;
	}
	cout<<x;
	return 0;
} 

知识点

快速幂取模

猜你喜欢

转载自blog.csdn.net/qq_43787707/article/details/105158851