您的位置:首页 > 其它

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

2016-06-07 11:15 405 查看


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<cstdio><span style="white-space:pre">	</span>//From Janis
#include<iostream>

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<<ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: