码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 4506 小明系列故事——师兄帮帮忙 ->简单快速幂

时间:2015-05-20 00:32:44      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:c   c++   acm   算法   编程   

分析:t单位时间后i的位置将变化到(i+t)%n位置上,下标i从0开始,之后快速幂完成。

#include<iostream>
using namespace std;

__int64 f_pow(__int64 a,__int64 b,__int64 mod)
{
	__int64 s=1;

	while(b>0)
	{
		if(b&1) s=s*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return s;
}

int main()
{
	int T;
	__int64 n,t,k,ai,a[10005],i;

	scanf("%d",&T);
	while(T--)
	{
		scanf("%I64d%I64d%I64d",&n,&t,&k);
		for(i=0;i<n;i++)
		{
			scanf("%I64d",&ai);
			a[(i+t)%n]=ai*f_pow(k,t,(__int64)1000000007)%1000000007;   //(i+t)%n相当于第t轮后的位置情况
		}
		printf("%I64d",a[0]);
		for(i=1;i<n;i++)
			printf(" %I64d",a[i]);
		printf("\n");
	}
	return 0;
}


HDU ACM 4506 小明系列故事——师兄帮帮忙 ->简单快速幂

标签:c   c++   acm   算法   编程   

原文地址:http://blog.csdn.net/a809146548/article/details/45853289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!