Codeforces879B

B - Table Tennis CodeForces - 879B
n people are standing in a line to play table tennis. At first, the first two players in the line play a game. Then the loser goes to the end of the line, and the winner plays with the next person from the line, and so on. They play until someone wins k games in a row. This player becomes the winner.

For each of the participants, you know the power to play table tennis, and for all players these values are different. In a game the player with greater power always wins. Determine who will be the winner.

Input
The first line contains two integers: n and k (2 ≤ n ≤ 500, 2 ≤ k ≤ 1012) — the number of people and the number of wins.

The second line contains n integers a1, a2, …, an (1 ≤ ai ≤ n) — powers of the player. It’s guaranteed that this line contains a valid permutation, i.e. all ai are distinct.

Output
Output a single integer — power of the winner.

Examples
Input
2 2
1 2
Output
2
Input
4 2
3 1 2 4
Output
3
Input
6 2
6 5 3 1 2 4
Output
6
Input
2 10000000000
2 1
Output
2
Note
Games in the second sample:

3 plays with 1. 3 wins. 1 goes to the end of the line.

3 plays with 2. 3 wins. He wins twice in a row. He becomes the winner.

//题目大题意思就是一般的比赛,给定赢得次数,谁先达到谁赢,就是比大小;
下面看下代码:用链表做的:

#include<iostream>
using namespace std;
struct node
{
    int data;
    node *next;
};                              //建立链表结构体
int main()
{
    node *head,*p,*tail,*r;
    head=new node;
    head->next=NULL;
    tail=head;                  //tail作为临时指针,首先指向头;
    int n;
    long long int k,sum;
    cin>>n>>k;
    for(int i=0; i<n; i++)
    {
        p=new node;
        cin>>p->data;
        p->next=NULL;
        tail->next=p;
        tail=p;                    //依次输入链表中的每一个元素
    }
    if(k>=n-1)
    {
        //这里很关键,去掉以后不知道为什么会wa啧啧啧
        p=head->next;           //如果次数大于等于除了第一个人的所有人时候,就是要找取最大值,稍微思考一下就会想到
        int max=p->data;
        for(; p!=NULL; p=p->next)
        {
            if(p->data>max)
                max=p->data;
        }
        cout<<max<<endl;
    }
    else
    {
        sum=0;                //其他情况中先令sum=0,sum代表赢得次数;
        while(sum<k)
        {
            p=head->next;          //p指向一串数中的第一个元素
            r=p->next;              //r指向p的下一个元素
            if(p->data>r->data)
            {
                sum++;            //赢一次sum++
                p->next=r->next;
                r->next=NULL;
                tail->next=r;
                tail=r;            //将输的元素加到链表的尾部,注意,这里tail就是链表的最后一个元素
            }
            else
            {
                sum=1;              //这里sum=1是因为他已经赢了她前面那个元素!!
                head->next=p->next;
                p->next=NULL;
                tail->next=p;
                tail=p;           //将输的元素放到链表尾部
            }
        }
        p=head->next;
        cout<<p->data<<endl;       //上述循环结束后第一个元素就是所求值winner
    }
    return 0;
}



猜你喜欢

转载自blog.csdn.net/weixin_43824158/article/details/85019965
今日推荐