这题是二叉树分类的题目,但是看不出来怎么用二叉树解答,有人说用线段树,但是线段树还不会。
归纳一下,大概2种方式解答:
1.STL解答
首先介绍原型stl里面的queue类。
queue是一种容器模板,头文件#include< queue >可以使用queue类。
queue
初始化时必须要有数据类型,容器可省略,省略时则默认为deque 类型
下面用一些代码简单介绍queue的使用;
1.初始化
#includequeue a ;//创建一个queue类对象a,其中的数据类型是int queue b; //同理 queue >c ;//数据类型为char,容器类型是list queue >d; //用deque实现的queue
2.赋值
for(int i=0;i<10;i++) //将1-10添加进queue容器对象a a.push(i+1);
3.删除
a.pop(); //删除队头元素
下面手写代码:
#include#include #include
2.快速排序
由于最后看到是两个国家比拼,那么把所有编号分成两份,左右各一半,左边的冠军和右边的冠军进行最后的决战争出冠军,亚军。再一个可以知道,一个区间编号的冠军一定是这个区间中最大的编号。那么,将两个区间进行快速排序,得到两个最大值,这两个最大值就是冠,亚军。
#includeusing namespace std; int tmp,n,tmp2,p,ans; struct cou{ int en;//每个国家的能量值 int ta;//每个国家的编号 }a[200]; bool cmp(cou x,cou y) { return x.en>y.en;//对结构体sort排序 } int main() { cin>>tmp; n=1< cin>>a[i].en; a[i].ta=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< cout<



