记录编号 372768 评测结果 EEEEEEEEEEEEEEEEEE
题目名称 [HZOI 2016]你猜是不是DP V2 最终得分 0
用户昵称 GravatarAntiLeaf 是否通过 未通过
代码语言 C++ 运行时间 8.888 s
提交时间 2017-02-19 06:35:42 内存使用 126.68 MiB
显示代码纯文本
#include<stdio.h>
#include<ctime>
#include<cassert>
char ch;inline void R_int(int &x){
	while(ch=getchar(),ch<'!');x=ch-48;
	while(ch=getchar(),ch>'!')x=x*10+ch-48;
}
const int maxn=11512;
int n,m,ans=0;char f[maxn][maxn],p;
inline int get(int x){
	assert(x>=0&&x<p);
	return (x^(x>>7)^(x<<3)^(x>>2))%n+1;
}
bool _(),__=_();int main(){;}
bool _(){
	freopen("NC.in","r",stdin);freopen("NC.out","w",stdout);
	R_int(n);m=n+1;
	int x,i,j;R_int(x),p=x;int i0,i1,i2,i3;
	for(i=1;i<m;i++)R_int(x),f[0][i]=x%p;
	for(i=1;i<m;i++)
	for(j=1;j<m;j+=4)
		i0=get(f[i-1][j])%p,
		i1=get(f[i-1][j+1])%p,
		i2=get(f[i-1][j+2])%p,
		i3=get(f[i-1][j+3])%p,
		f[i][j]=i0,
		f[i][j+1]=i1,
		f[i][j+2]=i2,
		f[i][j+3]=i3;
		
	for(i=1;i<m;i++)
	for(j=1;j<m;j+=4)
		i0=f[i-1][j],
		i1=f[i-1][j+1],
		i2=f[i-1][j+2],
		i3=f[i-1][j+3],
		f[i][j]+=f[get(i0)][get(i0+1)],f[i][j]%=p,ans+=f[i][j],
		f[i][j+1]+=f[get(i1)][get(i1+1)],f[i][j+1]%=p,ans+=f[i][j+1],
		f[i][j+2]+=f[get(i2)][get(i2+1)],f[i][j+2]%=p,ans+=f[i][j+2],
		f[i][j+3]+=f[get(i3)][get(i3+1)],f[i][j+3]%=p,ans+=f[i][j+3],ans%=p;
	//f[i][j]+=f[get(f[i-1][j])][get(f[i-1][j]+1)],ans+=f[i][j];
	printf("%d\n",ans%p);
	//printf("%d\n",clock());
}