求助。。
查看原帖
求助。。
315205
Kniqht楼主2020/7/28 12:21

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10,mod=998244353;
int h[N],n,a[N];
int check(int x)
{
    int L=0,R=n;
    while(L<R)
    {
        int mid=(L+R+1)>>1;
        if(a[mid]<x) L=mid;
        else R=mid-1;
    }
    return L;
}
ll ans;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]),h[a[i]]++;
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
    {
        if(h[a[i]]<=1) continue;
        int tmp=h[a[i]],cnt=check(a[i]*2);h[a[i]]=0;
        if(tmp==cnt){ans=(ans+(ll)(cnt)*(cnt-1)*(cnt-2)/6ll%mod)%mod;continue;}
        ans=(ans+((ll)tmp*(ll)(tmp-1)/2ll*(ll)(cnt-2)%mod))%mod;
    }
    printf("%lld",ans%mod);
    return 0;
}

一直搞不对,或者大佬说一下正解思路也行啊

2020/7/28 12:21
加载中...