洛谷 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;
}