标签:sort tmp 国家 16 int 深基 淘汰赛 亚军 cmp
题目描述
有 2^n(n\le7)2n(n≤7) 个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?
输入格式
第一行一个整数 nn,表示一共 2^n2n 个国家参赛。
第二行 2^n2n 个整数,第 ii 个整数表示编号为 ii 的国家的能力值.
数据保证不存在平局。
输出格式
仅一个整数,表示亚军国家的编号。
输入输出样例
输入 输出
3 1 4 2 3 1 10 5 9 7
思路:在所有队伍两两比赛中,求得能量值大的那个,一直进行下去,最后求得亚军。但是并不是,所有数字中第二大的就是亚军,他可能中途就被pk掉了。
我的做法是以中间为分界线,分别求得两边分别最大的一个,最后其中较小的那个就是答案。
小知识:1. bool cmp(a,b)
return a<b ;
比较函数
2.sort(a,a+10,cmp)
sort(a,a+10)
下面是代码:
#include<bits/stdc++.h> using namespace std; int tmp,n,tmp2,p,ans; struct cu{ int e; int t; } a[501]; bool cmp(cu x,cu y) { return x.e>y.e; } int main() { cin>>tmp; n=pow(2,tmp); for(int i=1;i<=n;i=i+1){ cin>>a[i].e; a[i].t=i; } sort(a+1,a+n/2+1,cmp); sort(a+n/2+1,a+n+1,cmp); if(a[1].e>a[n/2+1].e){ cout<<a[n/2+1].t; } else{ cout<<a[1].t; } return 0; }
欢迎大家讨论指正。
标签:sort,tmp,国家,16,int,深基,淘汰赛,亚军,cmp 来源: https://www.cnblogs.com/zsl2002/p/16222720.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。