这样推没啥问题吧
查看原帖
这样推没啥问题吧
415354
dadaaa楼主2022/10/24 10:30

记:ans=ak2+a22+...+an2 ans=a_k^2+a_2^2+...+a_n^2

t=ak+a2+...+ant=a_k+a_2+...+a_n

ans=(ak+1)2+...+(an+1)2ans'=(a_k+1)^2+...+(a_n+1)^2

=ans+2t+nk+1=ans+2t+n-k+1(此时第一个值得放最后的为k)

t=t+nk+1t'=t+n-k+1

代码如下:

for(int i=k+1;i<=n;i++) {
		tot2=(tot2+((a[i]+1)*(a[i]+1))%P)%P;
		tot3=(tot3+a[i]+1)%P; 
	}
	ans=(ans+tot1+tot2)%P;
	for(int i=2;i<=m;i++) {
		tot2=(tot2+2*tot3+n-k)%P;
		tot3=(tot3+n-k)%P;
		while(k!=0&&-a[k]-1<a[k]+i) {
			tot1=(tot1-((a[k]+1)*(a[k]+1))%P+2*P)%P;
			tot2=(tot2+((a[k]+i)*(a[k]+i))%P)%P;
			tot3=(tot3+a[k]+i)%P;
			k--;
		}
		ans=(ans+tot1+tot2)%P;
	}
    

为什么大样例过不了呢

2022/10/24 10:30
加载中...