#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
#define ll long long
ll mod;
struct Matrix
{
ll v[550];
Matrix()
{
memset(v,0,sizeof v);
}
}p,l;
Matrix mul(Matrix a,Matrix b,int n)
{
Matrix sum;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
sum.v[i]=(sum.v[i]+a.v[j]*b.v[(j-i+n)%n])%mod;
}
return sum;
}
Matrix mypow(Matrix a,int k,int n)
{
Matrix sum=p;
while(k)
{
if(k&1) sum=mul(sum,a,n);
k>>=1;
a=mul(a,a,n);
}
return sum;
}
int main()
{
int k,d,n;
while(~scanf("%d %lld %d %d",&n,&mod,&d,&k))
{
for(int i=0; i<n; i++)
scanf("%lld",&p.v[i]);
Matrix m;
m.v[0]=1;
for(int i=1; i<=d; i++)
m.v[i]=m.v[n-i]=1;
l=mypow(m,k,n);
for (int i=0; i<n-1; i++)
printf("%lld ",l.v[i]);
printf("%lld\n",l.v[n-1]);
}
return 0;
}
UVA1386-Cellular Automaton(循环矩阵)
最新推荐文章于 2018-08-07 21:12:36 发布