链接:https://www.nowcoder.com/acm/contest/201/E
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 1048576K,其他语言2097152K
64bit IO Format: %lld

题目描述

Novus Aither是一个潜藏着多个势力的城市。每个势力都有一个唯一的领导人,每个领导人有一个属性值。如果两个势力的领导人的属性值分别为a,b,且|a-b| ≤ m,说明这两个领导人的思想有一定的相似之处,这两个势力可以合并,新的领导人可以指定为原来的两个领导人中的任意一个。新产生的势力可以依照相同的规则,继续与其他势力合并。问在所有可能的情况中,最少会剩下几个势力。

输入描述

第一行两个空格隔开的整数n(1 ≤ n ≤ 106),m(0 ≤ m ≤ 10^9)。n代表当前势力的个数。m的含义如题目描述。 第二行n个空格隔开的整数di(0 ≤ di ≤ 10^9),代表第i个势力的领导人的属性值。

输出描述

输出一个数表示势力的最少数量。

输入

4 1
2 1 3 10

输出

2

解题思路

首先按从小到大排序,判断相邻两项的值是否大于m。

#include <iostream>
#include <algorithm>
using namespace std;
int a[1000010], n, m, ans;
int main()
{
	while (cin >> n >> m)
	{
		ans = 0;
		for (int i = 0; i < n; i++)
			cin >> a[i];
		sort(a, a + n);
		for (int i = 1; i < n; i++)
			if (a[i] - a[i - 1] > m)
				ans++;
		cout << ans + 1 << endl;
	}
	return 0;
}