洛谷 P4715 【深基16.例1】淘汰赛
题目描述
有 2^n(n\le7)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;
}