#3WA
查看原帖
#3WA
87549
石哈哈楼主2021/9/17 16:40

评测结果https://www.luogu.com.cn/record/58152283

#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 2e5;
int n,c,sum = 0,Sum = 0;
int C[N],au_sp[N];
void search(int l,int r,int k)
{
    int mid = (l + r)/2;
    if (l == r)
    {
        if (C[l] == k) sum = au_sp[l];
        return ;
    }
    
    else
    {
        if (C[mid]>=k) search(l,mid,k);
        if (C[mid]<k) search(mid+1,r,k);
    }
}

int main()
{
    scanf("%d %d",&n,&c);
    scanf("%d",&C[0]);
    int sum_sp = 1;
    for(int i=1;i<n;i++)scanf("%d",&C[i]);
    sort(C,C+n);
    for(int i=1;i<n;i++)
    {
        au_sp[i] = 1;
        if (C[i] == C[i-1])sum_sp++;
        else {au_sp[i-sum_sp] = sum_sp;sum_sp = 1;}
    }
    au_sp[n-sum_sp] = sum_sp;

    int search_b = N,l;
    for(int i = 0;i<n;i++)
    {
        if (search_b != C[i])
        {
            search_b = C[i];
            l = i + au_sp[i];
            if (l > n-1)break;
//            printf("%d %d %d ",l,n-1,search_b + c); 
            search(l,n-1,search_b + c); 
//            printf("%d\n",sum*au_sp[i]);
            Sum += sum*au_sp[i];
        }
        else continue;
    }
/*
    for (int i = 0;i<n;i++)
    printf("%d ",C[i]);
    printf("\n");
    for (int i = 0;i<n;i++)
    printf("%d ",au_sp[i]);
    printf("\n");
*/
    printf("%d",Sum);
    return 0;
}
2021/9/17 16:40
加载中...