社区讨论

为什么错了,是没用逆元吗(玄关)

P6686混凝土数学参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mid8ro2d
此快照首次捕获于
2025/11/24 22:28
3 个月前
此快照最后确认于
2025/11/25 08:03
3 个月前
查看原帖
RT,使用前缀和+组合数学
CPP
#include<bits/stdc++.h>
#define int long long
#define pc putchar
using namespace std;
namespace IO{
	inline int rd(){
		int x=0,f=1;
		char c=getchar();
		while(c<'0'||c>'9'){
			if(c=='-'){
				f=-1;
			}
			c=getchar();
		}
		while(c>='0'&&c<='9'){
			x=(x<<1)+(x<<3)+(c^48);
			c=getchar();
		}
		return x*f;
	}
	inline void wt(int x){
		if(x<0){
			x=-x;
			putchar('-');
		}
		if(x>9){
			wt(x/10),putchar(x%10+'0');
		}
		else{
			putchar(x+'0');
		}
		return ;
	}
}
using namespace IO;
namespace Main{
	const int N=2e5+7,MOD=998244353;
	int n,res;
	int s[N],p[N<<1],cnt[N];
	inline int mod(int x){
		return ((x%MOD)+MOD)%MOD;
	}
	inline void main(){
		n=rd();
		for(int i=1;i<=n;i++){
			s[i]=rd();
			++cnt[s[i]];
		}
		sort(s+1,s+n+1);
		n=unique(s+1,s+n+1)-(s+1);
		for(int i=1;i<N<<1;i++){
			p[i]=p[i-1]+cnt[i];
		}
		for(int i=1;i<=n;i++){
			int cct=cnt[s[i]];
			if(cct>=2){
				res+=(mod(mod(mod(cct)*(cct-1)*(cct-2))))/6+mod(cct*(cct-1)/2)*(p[(s[i]<<1)-1]-cnt[s[i]]);
			}
		}
		wt(mod(res));
		return ;
	}
}
signed main(){
	Main::main();
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...