hdu 4506

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

}


 

發佈了19 篇原創文章 · 獲贊 9 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章