92分,WA了第三个点:2e5 1,其余的全是 111....222.....
  • 板块P1102 A-B 数对
  • 楼主ljx_gkx
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/4/4 13:03
  • 上次更新2023/10/23 19:28:59
查看原帖
92分,WA了第三个点:2e5 1,其余的全是 111....222.....
853953
ljx_gkx楼主2023/4/4 13:03
#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;
int a[200010];

int main()
{
    int n, c;
    cin >> n >> c;
    for (int i=1; i <= n; i ++)
        cin >> a[i];

    int cnt = 0;

    sort (a+1, a+1+n);  //从小到大排序!
    for (int i=1; i <= n; i ++)
    {
        int x = a[i]  + c;
        int l = 1, r = n;
        while (l < r)       //先找到目标值最左边的元素!
        {
            int mid = (l+r) >> 1;
            if (a[mid] >= x) r = mid;
            else l = mid + 1;
        }
        int t1 = r;

        //找到某个数最右边的位置!
        l = 1, r = n;
        while (l < r)
        {
            int mid = (l+r+1) >> 1;
            if (a[mid] <= x) l = mid;
            else r = mid - 1;
        }
        int t2 = r;
        
        if (a[t1] == x && a[t2] == x)
            cnt += t2 - t1 + 1;
    }
    cout << cnt << endl;
    return 0;
}
2023/4/4 13:03
加载中...