其他分享
首页 > 其他分享> > 【国庆の礼物 之三】洛谷P1965 转圈游戏

【国庆の礼物 之三】洛谷P1965 转圈游戏

作者:互联网

国庆礼物第三篇。
题目:

思路:模拟,取模计算

方法1:模拟,90分,一个点超时

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,k,x,ans;
int main(){
	cin>>n>>m>>k>>x;
	ans=m;
	for(int i=1;i<=k;i++){
		ans=ans*10%n;
	}
	//m*(10^k%n)
	ans=(x+ans)%n;
	printf("%lld",ans);
}

方法2:使用快速幂

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,k,x,ans,base=10;
int main(){
	cin>>n>>m>>k>>x;
	ans=m;
	//31
	//10^31 = 10^16 * 10^8 * 10^4 * 10^2 *10^1
	while(k){
		if(k%2==1)ans=ans*base%n;//快速幂拆分 
		base=base*base%n;//平方 
		k/=2;
	}
	//(x+ m*(10^k%n))%n
	ans=(x+ans)%n;
	printf("%lld",ans);
	return 0;
}

标签:10,洛谷,int,ll,long,base,转圈,ans,P1965
来源: https://www.cnblogs.com/jisuanjizhishizatan/p/15363633.html