在第三个节点wa了,求组该如何修改
查看原帖
在第三个节点wa了,求组该如何修改
581923
Mrcosine0623楼主2022/2/26 15:35

其他节点都顺利通过,第三个节点出现了问题,不知道该如何修改。 使用二分法来做的这道题

#include <iostream>
#include <algorithm>
using namespace std;
const int N=200000+10;
int num[N];
int n,c;
int ac,ap;
int bi(int n,int l,int r)
{
    if(l>=r)
    {
        if(num[l]==n) return l;
        else return -1;
    }
    else
    {
        int mid=(l+r)/2;
        if(num[mid]<n) bi(n,mid+1,r);
        else bi(n,l,mid);
    }
}

int count(int n,int loc)
{
    int res=0;
    while(num[loc++]==n) res++;
    return res;
}
int main() {
    long long res=0;
    cin>>n>>c;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&num[i]);
    }
    sort(num,num+n);



    for(int i=0;i<=n;i+=ac)
    {
        int tmp;
        tmp=bi(num[i]+c,i,n-1);
        ac=count(num[i],i);

        if(tmp!=-1)
        {
            ap=count(num[i]+c,tmp);
            res+=ac*ap;
        }
        else continue;

    }
    cout<<res;
    return 0;
}

2022/2/26 15:35
加载中...