洛谷 P1102 A-B 数对

84Code:

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int a[200010];
int main(){
    int N, t, ans = 0;
    cin >> N >> t;
    for(int i = 0; i < N; i++) cin >> a[i];
    sort(a, a + N);
    int l = 0, r = 1;
    while(r < N){
        int x = a[r] - a[l];
        if(x == t){
            for(int i = l; a[r] - a[i] == t && i < r ; i++) ans++;
            r++;
        }else if(x < t){
            r++;
        }else{
            l++;
        }
        if(l == r) r++;
    }
    cout << ans;
    return 0;
}

上面的是我第一次用的应该算作移动窗口,超时了两个测试点。。。。
有没有大佬施舍一下优化思路的??卡了我半天。。。

最终还是用了题解的map。。

AcCode:

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
map<int, int> m;
ll a[200010];
int main(){
    ll N, t, ans = 0;
    cin >> N >> t;
    for(int i = 0; i < N; i++){
        cin >> a[i];
        m[a[i]]++; 
    }
    
    for(int i = 0; i < N; i++){
        ans += m[a[i] - t];
    }
    cout << ans;
    return 0;
}
posted @ 2025-05-26 23:33  Yuhhhhh  阅读(24)  评论(0)    收藏  举报