#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL read()
{
LL w=0;bool f=true;char c=getchar();
while(!isdigit(c)){if(c=='-')f=false;c=getchar();}
while(isdigit(c))w=(w<<1)+(w<<3)+(c^48),c=getchar();
return f?w:~w+1;
}
const int Mod=998244353,N=2e5+55;
LL sum[N],a[N],n,Max,Ans;
int main()
{
n=read();
for(int i=1;i<=n;++i)
{
LL x=read();
a[x]++;
Max=max(Max,x);
}
for(int i=1;i<=Max;++i) sum[i]=sum[i-1]+a[i];
for(int i=1;i<=Max;++i)
{
if(a[i]>=2) Ans=(Ans+ a[i]*(a[i]-1)/2*(sum[min(Max,(LL)i*2-1)]-a[i])%Mod )%Mod;
if(a[i]>=3) Ans=(Ans+ a[i]*(a[i]-1)*(a[i]-2)/6%Mod )%Mod;//这样就对了
//if(a[i]>=3) Ans=(Ans+ a[i]*(a[i]-1)%Mod*(a[i]-2)%Mod /6 )%Mod;这样就错了
}
printf("%lld\n",Ans%Mod);
return 0;
}
对的代码
if(a[i]>=3) Ans=(Ans+ a[i]*(a[i]-1)*(a[i]-2)/6%Mod )%Mod;
错的代码,多 膜 模了一下
if(a[i]>=3) Ans=(Ans+ a[i]*(a[i]-1)%Mod*(a[i]-2)%Mod /6 )%Mod;
之后遇到这样的怎么办qwq