双指针第三个点过不了
  • 板块P1102 A-B 数对
  • 楼主remiriya
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/4 10:34
  • 上次更新2023/11/3 11:41:10
查看原帖
双指针第三个点过不了
844145
remiriya楼主2023/7/4 10:34

代码如下

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int a[200010];
int main()
{
    int n, c;
    cin >> n >> c;
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    sort(a, a + n);
    ll ans = 0;
    for (int p1 = 0, p2 = 0; p1 < n && p2 < n;)
    {
        int count1 = 1, count2 = 1;
        while (p2 < n && a[p2] - a[p1] < c)
            p2++;
        while (p1 < n && a[p2] - a[p1] > c)
            p1++;
        if (p2 >= n || a[p2] - a[p1] < c)
            continue;
        while (a[p1] == a[++p1])
            count1++;
        while (a[p2] == a[++p2])
            count2++;
        ans += count1 * count2;
    }
    cout << ans;
    return 0;
}

大致思路应该没问题

2023/7/4 10:34
加载中...