记录编号 170250 评测结果 AAAAAAAAAA
题目名称 [UVa 1386] 细胞自动机 最终得分 100
用户昵称 Gravatar一個人的雨 是否通过 通过
代码语言 C++ 运行时间 4.119 s
提交时间 2015-07-12 18:04:09 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#define speedup ios::sync_with_stdio(false)
using namespace std;
int n,m,d,k;
int Mod;

struct Matrix{
	long long e[501];
	Matrix operator * (const Matrix& b)
	{
		Matrix c={0};
		for(int i=0;i<n;++i)
		 for (int j=0;j<n;++j)
		  c.e[i]=(c.e[i]+e[j]*b.e[(i-j+n)%n]%Mod)%Mod;
		return c;
	}
	Matrix operator *= (const Matrix& b){
		*this=*this*b;
	}
}M1,M2;

int main()
{
	freopen("cellularautomaton.in","r",stdin);
	freopen("cellularautomaton.out","w",stdout);
	speedup;
 while (scanf("%d%d%d%d",&n,&m,&d,&k)==4)
 {
	memset(M1.e,0,sizeof(M1.e));
	memset(M2.e,0,sizeof(M2.e));
	Mod=m;
	for (int i=0;i<n;++i)
	 scanf("%lld",&M2.e[i]);
	M1.e[0]=1;
	for (int i=1;i<=d;++i)
	 M1.e[i]=1;
	for (int i=n-1;i>=n-d;--i)
	 M1.e[i]=1;
	while (k>0)
	{
		if (k&1)
		 M2*=M1;
		M1*=M1;
		k>>=1;
	};
	for (int i=0;i<n-1;++i)
	 printf("%lld ",M2.e[i]);
	printf("%lld\n",M2.e[n-1]);
 }
 return 0;
}