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<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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值