今日题目:淘汰赛
题目描述
有 2n(n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?
输入格式
第一行一个整数 n,表示一共 2n 个国家参赛。
第二行 2^n 个整数,第 i 个整数表示编号为 ii 的国家的能力值(1≤i≤2n)。
数据保证不存在平局。
输出格式
仅一个整数,表示亚军国家的编号。
题目分析
题目难度:⭐️
题目涉及算法:dfs,队列,树形结构。
ps:有能力的小伙伴可以尝试优化自己的代码或者一题多解,这样能综合提升自己的算法能力
题解报告:
1.思路
这题可以用队列解决,可以用递归解决,可以用线段树解决,暴力也没问题,我这里是用的暴力,因为数据范围不大,所以找一下左右两边最大的然后输出小的就好了!
2.代码
#include<bits/stdc++.h> using namespace std; int n; int a[1000]; int main() { cin>>n; n = (1<<n); for(int i=1;i<=n;i++) { cin>>a[i]; } int l = 0,r = 0; for (int i=1;i<=n/2;i++) { if(a[i]>a[l]) { l = i; } } for(int i=n/2+1;i<=n;i++) { if(a[i]>a[r]) { r = i; } } if(a[l]<a[r]) { cout<<l; } else { cout<<r; } return 0; }