60pts 求hack
查看原帖
60pts 求hack
443675
紊莫turtle楼主2022/10/23 12:34
#include <bits/stdc++.h>
#define int long long
using namespace std;

inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
inline void write(int x){if (x < 0) x = ~x + 1, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');}
inline void writeln(int x){write(x);putchar('\n');}
inline void writesp(int x){write(x);putchar(' ');}
const int mod=998244353;
int a[1000005],ans;
int sq(int x){return x*x%mod;}
signed main()
{
    int n=read(),k=read(),neg=0,pos=0,sum,sqsum=0;
	//neg:负数+1后的平方和 pos:正数个数 sum:正数和,sqsum:正数平方和
	for(int i=1;i<=n;i++)
	{
		a[i]=read();
		if(a[i]<0) neg=(neg+sq(a[i]+1)%mod)%mod;
		else 
		{
			pos++;
			sqsum=(sqsum+sq(a[i])%mod)%mod;
		}
		a[i]+=a[i-1];
		a[i]%=mod;
	}
	sum=(a[n]-a[n-pos])%mod;
	sum=(sum+mod)%mod;
	for(int i=1;i<=k;i++)
	{
		int q=neg%mod+sqsum%mod+(i*2*sum)%mod+sq(i)*pos%mod;
		ans=(ans+q%mod)%mod;
	}
	writeln(ans%mod);
    return 0;
}
2022/10/23 12:34
加载中...