COGS 1437. [NOIP2013]转圈游戏 解题报告

COGS 1437.转圈游戏 解题报告

-----------------------------------------------------------------------------------------------------------
Janis


1437. [NOIP2013]转圈游戏

★   输入文件: CircleNOIP2013.in    输出文件: CircleNOIP2013.out     简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】



【输入格式】

输入文件名改为:CircleNOIP2013.in

【输出格式】

输出文件名改为:CircleNOIP2013.out


【来源】

CCF全国信息学奥林匹克联赛 (NOIP2013)复赛Day1


(水题,强行凑字数 233333333333333)



分析:

看到这题第一眼,首先应该想到是小学奥数题,有关取余数之类的知识。然后再看题目要求及数据范围(好大),得知是快速幂取模,然后就很简单了。


算法设计:
一次走m个人第x位应该是轮数*m%n+x。
快速幂是利用分治策略。
a*b%c=((a%c)*(b%c))%c



#include	//From Janis
#include
 
using namespace std;
 
typedef long long ll;
ll n,m,k,x;
ll pow_n(ll p,ll k){//quick_pow  p^k
	ll tmp=1;
	while(k){
		if(k&1)tmp=(tmp*p)%n;
		p=((p%n)*(p%n))%n;
		k>>=1;
	}
	return tmp%n;
}
int main()
{
	freopen("CircleNOIP2013.in","r",stdin);
	freopen("CircleNOIP2013.out","w",stdout);
	cin>>n>>m>>k>>x;
	ll tmp=pow_n(10,k);
	tmp*=m;
	tmp%=n;
	ll ans=tmp+x;
	ans%=n;
	cout<


你可能感兴趣的:(COGS 1437. [NOIP2013]转圈游戏 解题报告)