标签:
2 3 2 5 1 2 3 3 0 5 1 2 3
50 75 25 1 2 3
快速幂问题,发现最后结果是 a[i]*k^t 然后根据 t 和 n的关系把序列重新排一下就OK啦
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#define N 10009
#define ll __int64
#define mod 1000000007
using namespace std;
ll n,t,k,T;
ll a[N];
ll pow_mod(ll m,ll n)
{
ll b=1;
while(n)
{
if(n&1)
b=(b*m)%mod;
n=n>>1;
m=m*m%mod;
}
return b;
}
ll b[N];
int main()
{
while(~scanf("%I64d",&T))
{
while(T--)
{
scanf("%I64d %I64d %I64d",&n,&t,&k);
for(ll i=0;i<n;i++)
scanf("%I64d",&a[i]);
ll mm=pow_mod(k,t);
for(ll i=0;i<n;i++)
{
a[i]=((mm*a[i])%mod);
}
ll f=t%n;
for(ll i=0;i<n;i++)
{
if(i+f>=n)
b[(i+f)%n]=a[i];
else
b[i+f]=a[i];
}
for(ll i=0;i<n-1;i++)
printf("%I64d ",b[i]);
printf("%I64d\n",b[n-1]);
}
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/wust_zjx/article/details/44314013