为什么没分,思路不对吗
查看原帖
为什么没分,思路不对吗
476720
_pharos_C楼主2022/10/25 22:05
#include<bits/stdc++.h>
#define N 1000001
#define cf(a) pow(a, 2)
using namespace std;
const int mod=998244353;

int n, k, ans, pos=1, tmp;
int a[N];

int main()
{
	scanf("%d%d",&n, &k);
	for(int i(1);i<=n;i++) scanf("%d",&a[i]), ans=(ans+(int)cf(a[i]))%mod;
	for(int i(2);i<=k;i++) {
		for(int j=pos;j<=n;j++) {
			if(abs(a[j]+i)>abs(a[j]+i-1)) {
				pos=j;
				int cnt=0, ext=ans%mod;
				for(int l=pos;l<=n;l++) cnt=(cnt+(int)cf(a[l]+i)%mod)%mod; 
				ans=(ans+tmp+cnt);
				tmp=abs(ans-ext)%mod;
				ans=ans%mod;
			}
		}
	}
	printf("%d\n",ans);
	return 0;
}

就是看当前这个数与前一个是分开还是不分开的贡献大

2022/10/25 22:05
加载中...