这题就是给定一个序列,进行变换:a[i] = a[i - 1]’ * K,求解一定时间后,整个序列变成什么样?
题目虽说是简单模拟,但是数据量巨大long long,普通必超时,那么肿么办?快速幂呗~
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define maxn 10006
#define Mod 1000000007
using namespace std;
long long a[maxn];
long long n,t,k;
//快速幂模版题
long long f(long long a,long long b,long long n)
{
long long t = a,d = 1;
while(b)
{
if(b%2) d=d*t%n;
b/=2;
t=t*t%n;
}
return d;
}
int main()
{
int Tcas;
scanf("%d",&Tcas);
while(Tcas--)
{
scanf("%I64d%I64d%I64d",&n,&t,&k);
for(int i=0;i<n;i++) scanf("%I64d",&a[i]);
long long p = f(k,t,Mod);
int s = 0; //s是最后a的起始位置
t = t % n;
if(t!=0)
s = n - t;
printf("%I64d",(p*(a[s]%Mod))%Mod);
for(int i=1;i<n;i++)
{
s++;
if(s==n) s = 0; //对于最后一个元素
printf(" %I64d",(p*(a[s]%Mod))%Mod);
}
puts("");
}
system("pause");
return 0;
}