洛谷-P1296 奶牛的耳语
题目描述
在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有 (n) 头奶牛,其中第 (i) 头牛在直线上所处的位置可以用一个整数坐标 (p_i(0le p_i le 10^8)) 来表示。在无聊的日子里,奶牛们常常在自己的牛栏里与其它奶牛交流一些八卦新闻。每头奶牛发出的声音响度是一样的,而由于声波的能量衰减,某头奶牛发出的声音只能被与它距离不超过 (d(0 le d le 10^4)) 的奶牛所听到,这样这对奶牛就称为可以相互交流的。现在给出所有奶牛的位置和声音所能传播的最远距离 (d) ,请你编个程序来计算你的养牛场里究竟有多少对可以相互交流的奶牛。
输入格式
第一行包含两个整数 (n,d)。
第二行包含 (n) 个整数,每个整数都是一个坐标 (p_i),描述一头奶牛在直线上的位置。
输出格式
一个数,表示养牛场中可以相互交流奶牛的对数。
输入输出样例
输入 #1
5 10
10 12 16 37 40
输出 #1
4
说明/提示
数据规模
对于 (40\%) 的数据,(1 leq n leq 10^3)。
对于 (100\%) 的数据,(1 leq n leq 10^6)。
C++代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, d, ans = 0;
cin >> n >> d;
int p[n];
for (int i=0; i<n; ++i)
cin >> p[i];
sort(p, p+n);
for (int i=0; i<n; ++i)
for (int j=i+1; j<n && p[j]<=p[i]+d; ++j, ++ans);
cout << ans << endl;
return 0;
}