HDU 6095 Rikka with Competition -2017多校联盟5 第11题

来源:互联网 发布:node就是nodejs 编辑:程序博客网 时间:2024/06/09 19:42

Rikka with Competition

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 4    Accepted Submission(s): 4


Problem Description
As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some math tasks to practice. There is one of them:

A wrestling match will be held tomorrow. n players will take part in it. The ith player’s strength point is ai.

If there is a match between the ith player plays and the jth player, the result will be related to |aiaj|. If |aiaj|>K, the player with the higher strength point will win. Otherwise each player will have a chance to win.

The competition rules is a little strange. Each time, the referee will choose two players from all remaining players randomly and hold a match between them. The loser will be be eliminated. Aftern1 matches, the last player will be the winner.

Now, Yuta shows the numbers n,K and the array a and he wants to know how many players have a chance to win the competition.

It is too difficult for Rikka. Can you help her?  
 

Input
The first line contains a number t(1t100), the number of the testcases. And there are no more than 2 testcases with n>1000.

For each testcase, the first line contains two numbers n,K(1n105,0K<109).

The second line contains n numbers ai(1ai109).
 

Output
For each testcase, print a single line with a single number -- the answer.
 

Sample Input
25 31 5 9 6 35 21 5 9 6 3
 

Sample Output
51
 

Source
2017 Multi-University Training Contest - Team 5



/*n个人每个人的能力是ai,当|ai-aj|>k时,能力大的人赢。否则两个人都可能赢n-1场比赛,每个人都等可能的跟别人打架,问最后可能赢的人数题解:把能力排序,两两之间算差,如果此人和前一个人能力差>k时,前者一定输并且前面人中不可能有打得过此人的,那么只有此人可能赢从左到右枚举一下即可*/#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1e5 + 10;int a[maxn];int n, k;int main(){    int t;    scanf("%d", &t);    while (t > 0)    {        t--;        scanf("%d%d", &n, &k);        for (int i=0; i<n; i++) scanf("%d", &a[i]);        sort(a, a+n);        int cnt = 1;        for (int i=1; i<n; i++){            if (a[i]-a[i-1] > k){                cnt = 1;                continue;            }            cnt++;        }        cout << cnt << endl;    }    return 0;}