#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
#define LL __int64
#define maxn 11111
const LL mod=1e9+7;
LL a[maxn],ans[maxn];
LL pow_mod(LL a,LL b)
{
LL s=1;
while(b)
{
if(b&1)
s=(s*a)%mod;
a=(a*a)%mod;
b=b>>1;
}
return s;
}
int main()
{
LL T;
cin>>T;
while(T--)
{
LL i,j,n,t,k,s;
cin>>n>>t>>k;
s=pow_mod(k,t);
for(i=0;i<n;i++)
{
cin>>a[i];
a[i]=(a[i]*s)%mod;
}
t=t%n;
for(i=t,j=0;i<n;i++,j++)
ans[i]=a[j];
for(i=0;i<t;i++,j++)
ans[i]=a[j];
cout<<ans[0];
for(i=1;i<n;i++)
cout<<" "<<ans[i];
cout<<endl;
}
return 0;
}
/*
一开始以为是用循环矩阵解得,找到了矩阵
|a1 a2 a3|*|0 k 0|=|a'1 a'2 a'3|
|0 0 k|
|k 0 0|
是个循环矩阵,后来TLE了才发现时间复杂度O(n^2),汗一个。。。
之后发现循环矩阵每行只有一个k,t次的矩阵,里边的数值就变为k^t,而且数值循环右移了t次,直接用这个规律快速幂就解决了
*/
hdu 4506 小明系列故事——师兄帮帮忙 找规律+快速幂
最新推荐文章于 2019-07-20 10:33:07 发布