hdu 4506
一個a序列,每一次變化a[i] = a[i - 1]’ * K,序列長n,有t次變化。
裏頭有個二分降冪,然後有個排序。
這裏頭有個好思路,就是,每個數都會乘以k的t次冪,那麼用t%n就知道a0要推遲多少個位置,由於位置只是顛倒一下,但順序沒變,則好排序。
所以先排序,在執行乘法是個好思路。
#include<stdio.h>
#define Mod 1000000007
int main()
{
int T,n,i,dis;
__int64 t,k,count,tt;
__int64 a[10005],b[10005];
while(~scanf("%d",&T))
while(T--)
{
scanf("%d",&n);
scanf("%I64d%I64d",&t,&k);
tt=t;
count=1;
while(tt)
{
if(tt&1)
count=(count*k)%Mod;
tt/=2;
k=(k%Mod)*(k%Mod);
k%=Mod;
}
for(i=0;i<n;i++)
{
scanf("%I64d",&a[i]);
b[i]=(a[i]*count)%Mod;
}
dis=t%n;
int temp;
temp=n-dis;
for(i=0;i<dis;i++)
a[i]=b[temp++];
temp=0;
for(i=dis;i<n;i++)
a[i]=b[temp++];
for(i=0;i<n;i++)
(i!=n-1)?printf("%I64d ",a[i]):printf("%I64d",a[i]);
printf("\n");
}
}