zoukankan      html  css  js  c++  java
  • 443 B. Table Tennis

    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
    Copy
    2 2
    1 2
    output
    2 
    input
    Copy
    4 2
    3 1 2 4
    output
    3 
    input
    Copy
    6 2
    6 5 3 1 2 4
    output
    6 
    input
    Copy
    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.

    简单题,注意k很大,当k>n时,输出最大的那个就行

    #include <bits/stdc++.h>
    using namespace std;
    #define maxn 100000
    typedef long long ll;
    #define inf 2147483647
    #define ri register int
    vector<ll> vec;
    ll p[maxn];
    ll cnt[maxn];
    ll n, k;
    ll ma = 0;
    
    int main() {
      // freopen("test.txt", "r", stdin);
      cin >> n >> k;
      for (int i = 1; i <= n; i++) {
        cin >> p[i];
        ma = max(ma, p[i]);
        vec.push_back(i);
      }
      if (k > n) {
        cout << ma;
        return 0;
      }
      while (1) {
        // for(ll i:vec)cout<<i<<" ";
        // cout<<endl;
        int t1 = vec.front();
        vec.erase(vec.begin());
        int t2 = vec.front();
        vec.erase(vec.begin());
        if (p[t1] > p[t2]) {
          cnt[t1]++;
          if (cnt[t1] == k) {
            cout << p[t1];
            return 0;
          }
          vec.push_back(t2);
          vec.insert(vec.begin(), t1);
        } else {
          cnt[t2]++;
          if (cnt[t2] == k) {
            cout << p[t2];
            return 0;
          }
          vec.push_back(t1);
          vec.insert(vec.begin(), t2);
        }
      }
    
      return 0;
    }
  • 相关阅读:
    【转】C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
    【转】第三方控件安装方法
    【jQuery插件】chackTextarea类似于新浪腾讯微博文本域字符数判断
    【转】关于wBox iFrame回调关闭问题的解决方案
    【转】jquery插件
    db4o助手 do4oHelper
    【转】C# 中文URL编码
    【转】C#集合之Hashtable
    【转】Web页面导出标准的Excel/Word/txt的代码实现
    jQuery图片居中裁切效果
  • 原文地址:https://www.cnblogs.com/planche/p/8506531.html
Copyright © 2011-2022 走看看