P4715 【深基16.例1】淘汰赛
题目描述
有 2^n (n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?
输入格式
第一行一个整数 n,表示一共 2^n 个国家参赛。
第二行2 ^ n个整数,第 i 个整数表示编号为 i 的国家的能力值(1≤i≤ 2^n)
数据保证不存在平局。
输出格式
仅一个整数,表示亚军国家的编号。
输入输出样例
输入 #1
3
4 2 3 1 10 5 9 7
输出 #1
1
代码实现
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int tmp, n;
struct county
{
int en; // 每个国家的能量值
int num; // 每个国家的编号
} a[200];
bool cmp(county x, county y)
{
return x.en > y.en; // 对能量值排序
}
int main()
{
cin >> tmp;
n = pow(2, tmp); // 计算tmp的2次幂
for (int i = 1; i <= n; i++)
{
cin >> a[i].en; // 输入能量值
a[i].num = i; // 给每个国家赋值编号
}
sort(a + 1, a + n / 2 + 1, cmp); // 前一部分国家排序
sort(a + n / 2 + 1, a + n + 1, cmp); // 后一部分国家排序
if (a[1].en > a[n / 2 + 1].en)
{
cout << a[n / 2 + 1].num;
}
else
{
cout << a[1].num;
}
return 0;
}