pairs HDU - 5178(尺取)

题意,给出一个数列x[],找出使得|x[b]-x[a]|<=k的组合<a,b>的对数,其中a<b,这对a,b谁前谁后没有影响,只是去掉重复的如有了<a,b>就不能有<b,a>,前边是绝对值,所以谁减谁就无所谓了;
思路不就有了?排个序,然后尺取不就可以了;
#include <bits/stdc++.h>
using namespace std;
int x[100010];
int main(){
	int T;
	scanf("%d", &T);
	while(T--){
		int n, k;
		scanf("%d%d", &n, &k);
		for(int i=0; i<n; i++)
			scanf("%d", &x[i]);
		sort(x, x+n);
		long long ans=0;
		for(int i=0, j=1; i<n-1; i++){
			while(j<n&&x[j]-x[i]<=k) j++;
			ans+=j-i-1;
			if(i>=j) j++;
		}
		printf("%lld\n", ans);
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/sirius_han/article/details/80990828