2017多校五 1011题 hdu 6095 Rikka with Competition

题目链接


题意:

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值