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

题目描述

有 2^n(nle7)2n(n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节。我经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?

输入格式

输出格式

输入输出样例

**输入 **

3
4 2 3 1 10 5 9 7

**输出 **

1

这道题目考察了N次比赛的冠军,我们只要进行比赛N - 1次,然后最后打印第二名的位置,可以借用一个map找回原来的位置

#include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
int main() {
    int N;
    scanf("%d", &N);
    vector<int> v(pow(2, N));
    map<int, int> m;
    for(int i = 0; i < v.size(); i++) {
        scanf("%d", &v[i]);
        m[v[i]] = i + 1;
    }
    while(N-- != 1) {
        vector<int> tmp;
        for(int i = 0; i < v.size(); i += 2) 
            tmp.push_back(max(v[i], v[i + 1]));
        v = tmp;
    }
    printf("%d", m[min(v[0], v[1])]);
    return 0;
}
原文地址:https://www.cnblogs.com/littlepage/p/13051570.html