社区讨论
为什么错了,是没用逆元吗(玄关)
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 条回复,欢迎继续交流。
正在加载回复...