#P1877. 淘汰赛1.填空题
淘汰赛1.填空题
题目描述
有 ()个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?
输入格式
第一行一个整数 ,表示一共 个国家参赛。
第二行 个整数,第 个整数表示编号为 的国家的能力值()。
数据保证不存在平局。
输出格式
仅一个整数,表示亚军国家的编号。
3
4 2 3 1 10 5 9 7
1
样例解释
解题思路
这是一棵完美二叉树,叶子节点的最底层有 个叶子节点,所以这棵树有 层。
所以,整棵树应该有 个节点。第 层节点的起始下标为 。
对于节点 和 之间的比赛,胜出者可以放入 (这是二叉树的一个特性)。
完成程序
#include<bits/stdc++.h>
using namespace std;
#define LC i*2
#define RC i*2+1
struct team
{
int id, ability;
}x[1024];
int level,tot;
int main(){
cin>>level; // 这棵完美二叉树有 level + 1 层
int start = __填空(1)__; // 最底层最左端的叶子节点编号
int tot = __填空(2)__; // 最底层的叶子节点数量
for(int i=1,j=start; i<=__填空(3)__;i++,j++){
cin>>x[j].ability;
x[j].id=i;
}
for(int i=__填空(4)__;i>0;i--){
if(x[LC].ability > x[RC].ability)
x[i]=x[__填空(5)__];
else
x[i]=x[__填空(6)__];
}
if(x[2].ability < x[3].ability)
cout<<__填空(7)__;
else
cout<<__填空(8)__;
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
填空(4):{{ input(4) }}
填空(5):{{ input(5) }}
填空(6):{{ input(6) }}
填空(7):{{ input(7) }}
填空(8):{{ input(8) }}
相关
在以下作业中: