记录编号 372755 评测结果 AAAAAAAAAAAAAAATTT
题目名称 2611.[HZOI 2016]你猜是不是DP V2 最终得分 83
用户昵称 AntiLeaf 是否通过 未通过
代码语言 C++ 运行时间 20.121 s
提交时间 2017-02-19 06:21:27 内存使用 126.46 MiB
显示代码纯文本
#include<cstdio>
using namespace std;
const int maxn=11502;
unsigned get(unsigned);
unsigned char f[maxn][maxn];
unsigned n,p,t;
int main(){
	freopen("NC.in","r",stdin);
	freopen("NC.out","w",stdout);
	register unsigned ans=0u;
	scanf("%u%u",&n,&p);
	for(register unsigned i=1u;i<=n;i++){
		scanf("%u",&t);
		f[0][i]=t%p;
	}
	for(register unsigned i=1u;i<=n;i++)for(register unsigned j=1u;j<=n;j++)f[i][j]=get(f[i-1u][j])%p;
	for(register unsigned i=1u;i<=n;i++){
		for(register unsigned j=1u;j<=n;j++){
			f[i][j]+=f[get(f[i-1][j])][get(f[i-1][j]+1)];
			if(f[i][j]>=p)f[i][j]%=p;
			ans+=f[i][j];
		}
		ans%=p;
	}
	printf("%u",ans);
	return 0;
}
inline unsigned get(register unsigned x){
	if(x>=p)x%=p;
	x^=(x>>7u)^(x<<3u)^(x>>2u);
	if(x>=n)x%=n;
	return ++x;
}