【vector+pair】洛谷 P4715 【深基16.例1】淘汰赛

题目:P4715 【深基16.例1】淘汰赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这道题因为数据范围不大,所以做法可以非常简单,使用一个vector加上pair就可以了;

(实际上可以预处理2的次方数,但因为懒就直接用pow()了)

做法就是每次按顺序比较当前国家数的一半次,期间输掉的国家直接用erase()踢掉!

代码:

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
typedef long long ll;
vector<pair<int, int>> a;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin >> n;
    int nn = pow(2, n);
    for (int i = 1; i <= nn; ++i)
    {
        int t;
        cin >> t;
        a.push_back(make_pair(t, i));
    }
    for (int i = n - 1; i >= 1; --i)
    {
        for (int j = 0; j < pow(2, i); ++j)
        {
            if (a[j].first > a[j + 1].first)
                a.erase(a.begin() + j + 1);
            else
                a.erase(a.begin() + j);
        }
    }
    if (a[0].first > a[1].first)
        cout << a[1].second << endl;
    else
        cout << a[0].second << endl;
    return 0;
}

 

posted @ 2021-12-07 20:02  blockche  阅读(88)  评论(0编辑  收藏  举报