• Table Tennis Codeforces 879B Round #443 Div.2 贪心 模拟


    可以证明,当k>=n的时候,必定是队伍里面实力最强的人胜利,因此对于这种情况,我们直接取队伍的最大能力值输出即可。

    对于k<n的情况,我们模拟就可以了。

    模拟用STL里面的双端队列(deque)是可以的,并且很方便,下面的代码就是用的deque。

    当然也可以只用一个queue单向队列,每次贪心地保留最大值,将保留的与新队首进行比较,然后pop掉其中一个也可以。

    其他细节可以看代码了,我打的时候一堆堆人被hack,心惊胆颤的,最后总测还是过了,excited。

    附上AC代码

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<queue>
     6 #include<iostream>
     7 using namespace std;
     8 template<class T> inline void read(T &_a){
     9     bool f=0;int _ch=getchar();_a=0;
    10     while(_ch<'0' || _ch>'9'){if(_ch=='-')f=1;_ch=getchar();}
    11     while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();}
    12     if(f)_a=-_a;
    13 }
    14 
    15 const int maxn=501;
    16 deque<int>a;
    17 long long n,k,cnt;
    18 
    19 int main()
    20 {
    21     read(n); read(k);
    22     for (register int i=1,v;i<=n;++i) read(v),a.push_back(v);
    23     if(k<n)
    24     {
    25         int a1,a2;
    26         while(cnt<k)
    27         {
    28             a1=a.front(); a.pop_front();
    29             a2=a.front(); a.pop_front();
    30             if(a1>a2)
    31             {
    32                 ++cnt;
    33                 a.push_front(a1);
    34                 a.push_back(a2);
    35             } else {
    36                 cnt=1;
    37                 a.push_front(a2);
    38                 a.push_back(a1);
    39             }
    40         }
    41         printf("%d",a.front());
    42     } else {
    43         int maxx=0;
    44         while(!a.empty())
    45         {
    46             maxx=max(maxx,a.front());
    47             a.pop_front();
    48         }
    49         printf("%d",maxx);
    50     }
    51     return 0;
    52 }
    View Code

    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 after which a player leaves, respectively.

    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.

  • 相关阅读:
    bzoj 2084: Antisymmetry 回文自动机
    bzoj 1819: 电子字典 Trie
    bzoj 1398: 寻找主人 AC自动机+最小表示法
    bzoj 4199: [Noi2015]品酒大会 后缀树
    bzoj 4044: Virus synthesis 回文自动机
    信用风险评分卡研究-第4章笔记
    信用风险评分卡研究-第3章笔记
    信用风险评分卡研究-第2章笔记
    信用风险评分卡研究-第1章笔记
    评分卡建模流程目录
  • 原文地址:https://www.cnblogs.com/jaywang/p/7741063.html
Copyright © 2020-2023  润新知