yicongli

HDU5628

Mar 29th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=100005;
  17. const int p=1e9+7;
  18.  
  19. inline int add(int a,int b){
  20.     return (a+=b)>=p?a-p:a;
  21. }
  22.  
  23. int tmp[N];
  24.  
  25. inline int mul(int *A,int *B,int *C,int n){
  26.     memset(tmp+1,0,n<<2);
  27.     for(int i=1;i<=n;++i){
  28.         for(int j=1;i*j<=n;++j){
  29.             tmp[i*j]=add(tmp[i*j],(ll)A[i]*B[j]%p);
  30.         }
  31.     }
  32.     memcpy(C+1,tmp+1,n<<2);
  33. }
  34.  
  35. int Ans[N];
  36.  
  37. inline void qpow(int *A,int *B,int k,int n){
  38.     memset(Ans+1,0,n<<2);
  39.     Ans[1]=1;
  40.     while(k){
  41.         if(k&1)mul(A,Ans,Ans,n);
  42.         mul(A,A,A,n);
  43.         k>>=1;
  44.     }
  45.     memcpy(B+1,Ans+1,n<<2);
  46. }
  47.  
  48. int f[N];
  49. int g[N];
  50.  
  51. int main(){
  52.     // freopen("mex.in","r",stdin);
  53.     // freopen("mex.out","w",stdout);
  54.     int T;r(T);
  55.     while(T--){
  56.         int n,k;r(n),r(k);
  57.         for(int i=1;i<=n;++i){
  58.             r(f[i]);
  59.             g[i]=1;
  60.         }
  61.         qpow(g,g,k,n);
  62.         mul(f,g,f,n);
  63.         for(int i=1;i<=n;++i){
  64.             printf("%d",f[i]);
  65.             putchar(i==n?'\n':' ');
  66.         }
  67.     }
  68. }
Add Comment
Please, Sign In to add comment