Codeforces Round #443 (Div. 2) B. Table Tennis

Codeforces Round #443 (Div. 2) B. Table Tennis     879B

啊啊啊啊啊啊 做的时候太天真了……一开始的直觉是对的……orz后来想多了,pretest还过了orz没想到啊orz,竟然wa了……

一开始被k的大小迷惑了……根本就不用管呐,k>n的话,必然是序列中最大值的赢,k<n的话就循环判断谁的逆序数(或者逆序数+1)最先达到k

(啊……其实就都按k<n写,直到到最大值了还没有赢k局的就……直接输出最大值……)

其实……就是求逆序数的感觉??稍微变化一下……每次输的人往后排……那power最大的那个人排到第一位以后就一直都是他赢了啊,

也就是说最多1个循环,局势就稳定了,emmmmm然后就暴力一下……记录一下逆序数,需要注意,当i跟j比,i输的时候j要记得+1啊……

#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<stdio.h>
using namespace std;
typedef long long ll;
ll n, a[1005],b[1005],k;
int main()
{
    cin >> n >> k;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    memset(b, 0, sizeof(b));
    int i = 0;
    while(i<n)
    {
        int j;
        for (j = i+1; j < n; j++)
        {
            if (a[i] < a[j])
            {
                b[a[j]]++;
                break;
            }
            else b[a[i]]++;
        }
        if (b[a[i]] >= k) //i先赢k局
        {
            cout << a[i] << endl;
            break;
        }
        if (j == n)  //此时a[j]为序列中的最大值,后面都是他赢了
        {
            cout << a[i] << endl;
            break;
        }
        i = j;// 在当前i输的时候,更新下一局,j前面的人已经排到队尾去了,不需要再判断了…
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Egoist-/p/7745448.html