Rikka with Competition
Posted a1b3c7d9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章