WA on #4求助
查看原帖
WA on #4求助
444707
Alphys楼主2022/10/23 15:15
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD = 998244353;
int lret,rret,sum,ans;
int n,k,mid,a[1000010];
inline int pow2(int x){
	return (x*x)%MOD;
} 
signed main(){
	//freopen("in.txt","r",stdin);
	scanf("%lld%lld", &n, &k);
	for(int i=1;i<=n;i++){
		scanf("%lld", &a[i]);
		if(a[i]<0)lret=(lret+pow2(a[i]+1))%MOD;
		else if(a[i]>=0)rret=(rret+pow2(a[i]))%MOD,sum=(sum+a[i])%MOD;
		if(!mid&&a[i]>=0&&a[i-1]<0)mid=i-1;
	}
	if(a[n]<0)mid=n;
	ans=(lret+rret+2*sum+(n-mid))%MOD;
	for(int i=2;i<=k;i++){
		ans=(ans+lret+rret+2*i*sum+pow2(i)*(n-mid))%MOD;
		while(mid&&a[mid]+i==-(a[mid]+1)){
			lret=(MOD+lret-pow2(a[mid]+1))%MOD;
			sum=(MOD+sum+a[mid])%MOD;
			rret=(rret+pow2(a[mid]))%MOD;
			mid--; 
		}
	}
	printf("%lld", ans);
	return 0;
}

开了long long,取了模。

四号测试点Wrong Answer

求调

2022/10/23 15:15
加载中...