【国庆の礼物 之三】洛谷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;
}