Rikka with Competition

Posted a1b3c7d9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rikka with Competition相关的知识,希望对你有一定的参考价值。

Rikka with Competition

给出一个大小为n的集合\(\a_i\\),每次从集合中随机挑出一对数\(a_i,a_j\),如果\(|a_i-a_j|>K\),那么从集合中删掉较小的那个数字,否则随机删掉一个数字,显然会有一个数字保留到最后,现在询问能够有可能保留到最后一个数字的数字个数,\(n\leq 10^5\)

序列无序,不妨排个序构成一个序列,显然序列最后一个元素必然有机会留到最后,此时考虑倒数第二个元素,如果它和最后一个元素的差的绝对值不超过K那么也有机会保留到最后。

于是我们得到一个做法,从最后一个元素往前扫描,如果它与后一个元素的差超过了K就break掉,那么这个元素后的所有元素都有机会保留到最后。

参考代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#define il inline
#define ri register
#define Size 105000
using namespace std;
int a[Size];
il void read(int&);
int main()
    int lsy,n,k;read(lsy);
    while(lsy--)
        read(n),read(k);
        for(int i(1);i<=n;++i)
            read(a[i]);
        sort(a+1,a+n+1);
        int ans(1);
        for(int i(n-1);i;--i)
            if(a[i+1]-a[i]<=k)
                ++ans;else break;
        printf("%d\n",ans);
    
    return 0;

il void read(int &x)
    x^=x;ri char c;while(c=getchar(),c<'0'||c>'9');
    while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();

以上是关于Rikka with Competition的主要内容,如果未能解决你的问题,请参考以下文章

E - Rikka with Competition

二分-E - Rikka with Mutex

HDU 5634 Rikka with Phi

HDU 6095: Rikka with Competition

Rikka with Prefix Sum(组合数学)

hdu 6090 Rikka with Graph