本文主要是介绍2017多校5 1011 Rikka with Competition,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://acm.hdu.edu.cn/showproblem.php?pid=6095
给出n个人的力量值,再给一个k,进行n-1次挑选,每次挑选2个人比拼,相差大于k的大者赢,小者淘汰。小于k则当做没发过。问最后有多少人能有机会不会被淘汰。
因为是n-1次所以最坏情况只剩下一个人,那么意味着如果最后剩下一些人,那么可以得到的就是这些剩下的人里最大与最小不会超过k,那么就可以对这些数字排序,然后从大到小去比较,一旦找到一个位置,这两个人相差大于k,则跳出,那么前面的人数则为答案。
#include <bits/stdc++.h>
using namespace std;
#define ma(a) memset((a),0,sizeof((a)))
const int MOD=1000000;long long int a[111111];
int main(){
int t;
cin>>t;while(t--){int num;long long int k;scanf("%d%lld",&num,&k);int i,j;for(i=0;i<num;i++)scanf("%lld",&a[i]);long long int ans=0;sort(a,a+num);int js=0;;i=num-2;long long int maxx=a[num-1];while(i>=0){if(maxx-a[i]>k){i--;js++;}else {maxx=a[i];i--;}}ans=num-js;cout<<ans<<endl;}return 0;
}
这篇关于2017多校5 1011 Rikka with Competition的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!