题目描述
在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有n头奶牛,其中第i头牛在直线上所处的位置可以用一个整数坐标pi(0<=pi<=10^8)来表示。在无聊的日子里,奶牛们常常在自己的牛栏里与其它奶牛交流一些八卦新闻。每头奶牛发出的声音响度是一样的,而由于声波的能量衰减,某头奶牛发出的声音只能被与它距离不超过d(0<=d<=10^4)的奶牛所听到,这样这对奶牛就称为可以相互交流的。现在给出所有奶牛的位置和声音所能传播的最远距离d,请你编个程序来计算你的养牛场里究竟有多少对可以相互交流的奶牛。
输入格式
第1行包含两个整数n,d。
第2行包含n个整数,每个整数都是一个坐标pi,描述一头奶牛在直线上的位置。
输出格式
一个数,表示养牛场中可以相互交流奶牛的对数。
输入输出样例
输入 #1复制
5 10
10 12 16 37 40
输出 #1复制
4
说明/提示
数据规模
对于40%的数据,n<=10^3;
对于100%的数据,n<=10^6。
#include <iostream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <climits>
using namespace std;
int main(int argc, char const *argv[])
{
/* code */
int n, d;
cin >> n >> d;
vector<int> nums;
int tmp;
for(int i = 0; i < n; i++)
{
cin >> tmp;
nums.push_back(tmp);
}
sort(nums.begin(), nums.end());
int count = 0;
int mymax = INT_MIN;
for(int i = 0; i < nums.size(); i++)
{
for(int j = i + 1; j < nums.size(); j++)
{
if(nums[j] <= nums[i] + d)
{
count++;
}
else
break;
}
}
cout << count << endl;
return 0;
}