题目描述
在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中。一共有 n 头奶牛,其中第 iii 头牛在直线上所处的位置可以用一个整数坐标 pi(0≤pi≤10^8)来表示。在无聊的日子里,奶牛们常常在自己的牛栏里与其它奶牛交流一些八卦新闻。每头奶牛发出的声音响度是一样的,而由于声波的能量衰减,某头奶牛发出的声音只能被与它距离不超过 d(0≤d≤10^4) 的奶牛所听到,这样这对奶牛就称为可以相互交流的。现在给出所有奶牛的位置和声音所能传播的最远距离 d ,请你编个程序来计算你的养牛场里究竟有多少对可以相互交流的奶牛。
输入格式
第一行包含两个整数 n,d。
第二行包含 n 个整数,每个整数都是一个坐标 pi,描述一头奶牛在直线上的位置。
输出格式
一个数,表示养牛场中可以相互交流奶牛的对数。
输入输出样例
输入 #1
5 10
10 12 16 37 40
输出 #1
4
说明/提示
数据规模
对于 40% 的数据,1≤n≤ 10^3。
对于 100% 的数据,1≤n≤ 10^6。
思路:
- 这题还是比较简单的,重点是循环那里,知道前面比较过的不用再比较就行了,因为可能会造成重复比较
- 但是超时就离谱…
代码实现:
package qwx.luogu;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
class Reader {
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
static String next() throws IOException {// 读取下一个字符串
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {// 读取下一个int型数值
return Integer.parseInt(next());
}
}
public class p1296 {
public static void main(String[] args) throws IOException {
int n=Reader.nextInt();
int d=Reader.nextInt();
int cnt=0;
int t=0;
int []c=new int [n];
for (int i = 0; i < n; i++) {
c[i]=Reader.nextInt();
}
for (int i=0;i<n;i++){//用于控制比较的次数,比如,第一个比较完之后后面就不用用它比较了
for (int j=i;j<n-1;j++){
t=Math.abs(c[i]-c[j+1]);
if (t<=d)
cnt++;
}
}
System.out.println(cnt);
}
}