标签:
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