记录编号 |
372768 |
评测结果 |
EEEEEEEEEEEEEEEEEE |
题目名称 |
[HZOI 2016]你猜是不是DP V2 |
最终得分 |
0 |
用户昵称 |
AntiLeaf |
是否通过 |
未通过 |
代码语言 |
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());
}