hdu6095 Rikka with Competition 2017多校第五场 贪心+思维

来源:互联网 发布:java jsonarray 删除 编辑:程序博客网 时间:2024/06/05 23:08

http://acm.hdu.edu.cn/showproblem.php?pid=6095

题意:有n个选手,每个人的能力值为a[i]。他们进行两两对决,直到出现唯一胜者。对决的胜负判断是这样的:如果两个人的能力值满足|a[i]-a[j]|<=k,这两个人都有获胜的可能。反之,能力值大的胜,小的淘汰出局。输出有多少个人有可能成为这个唯一胜者。

题解:贪心思想,每次找第一大的和第二大的比,如果满足<=k。那么两个人都有可能获胜,反之只有一个可能获胜。排序遍历即可。

代码:

#include<bits/stdc++.h>#define debug cout<<"aaa"<<endl#define mem(a,b) memset(a,b,sizeof(a))#define LL long long#define lson l,mid,root<<1#define rson mid+1,r,root<<1|1#define MIN_INT (-2147483647-1)#define MAX_INT 2147483647#define MAX_LL 9223372036854775807i64#define MIN_LL (-9223372036854775807i64-1)using namespace std;const int N = 100000 + 5;const int mod = 1000000000 + 7;int t,n,k,a[N],temp,ans;int main(){scanf("%d",&t);while(t--){ans=1;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){scanf("%d",&a[i]);}sort(a,a+n);temp=a[n-1];for(int i=n-1;i>=1;i--){if(temp-a[i-1]<=k){ans++;}else{break;}temp=a[i-1];}printf("%d\n",ans);}return 0;}