这题取模取错了,求大佬解释QWQ
查看原帖
这题取模取错了,求大佬解释QWQ
49468
寻旧楼主2020/7/30 15:43
#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

2020/7/30 15:43
加载中...