题意:
n 个人之间进行 n - 1 场比赛(淘汰赛),第 i 个人的能力值为 ai. 在 i 与 j PK 时,当且仅当 |ai - aj] > K 时,这一局才有确定的胜者,即能力值高的人;否则两人均可能获胜。给出 n 个人的能力值,问最终的胜者可能有几种情况。
思路:
一个人如果 A 能力值低还要能成为最后的赢家,那他肯定至少要侥幸打败最近的比他能力值高的人 B,并且 B 也要至少侥幸打败最近的比他能力值高的人 C,等等等,一直推下去,能力值次高的人也要能侥幸打败能力值最高的人。
于是 sort 一下,从能力值高往低去找,一旦 能够侥幸打败 的这个条件不满足,这个链就中断了。而中断之前的任意一个人都可能成为最终的赢家。
Code:
#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
int a[maxn];
void work() {
int n, k;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
sort(a, a + n);
int i;
for (i = n - 1; i > 0; --i) {
int x = a[i] - a[i - 1];
if (x > k) break;
}
printf("%d\n", n - i);
}
int main() {
int T;
scanf("%d", &T);
while (T--) work();
return 0;
}