76分,有TLE有RE,帮帮
  • 板块P1102 A-B 数对
  • 楼主flashfear
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/23 13:46
  • 上次更新2024/11/23 15:58:07
查看原帖
76分,有TLE有RE,帮帮
1526602
flashfear楼主2024/11/23 13:46
#include <bits/stdc++.h>

using namespace std;

int cmp(int x, int y) {
    return x <= y;
}

int arr[200020], arr2[200020], ans[200020];

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

    sort(arr, arr + n, cmp);//排序

    // 双指针对所有不同的数计数。
    int l = 0, r = 0, posi = 0;
    while (r <= n) {
        
        if (arr[l] == arr[r])
            r++;
        else {
        	if (r == n) {
		        ans[posi]  = arr[l];
			    arr2[posi] = r - l;
			    break;
        	}
            ans[posi] = arr[l];
            arr2[posi++] = r - l;
            l = r;
        }
    }
    // over.
    l = r   = 0;
    int cnt = 0;
    while (r <= posi) {
        if (ans[r] - ans[l] > c) l++;
        if (ans[r] - ans[l] == c) {
            cnt += arr2[l] * arr2[r];
            r++;
        }
        if (ans[r] - ans[l] < c) r++;
    }
    cout << cnt;

    system("pause");
    return 0;
}
2024/11/23 13:46
加载中...