中级天翼
1167 植树积分(points)
经验值:1200 时间限制:1000毫秒
合肥市第32届信息学竞赛
不许抄袭,一旦发现,直接清空经验!
题目描述 Description
在卡卡西的带动下,其他小伙伴也都逐渐被吸引过来,大家卷起袖子,挥起铲子,都想种几棵属于自己的小树,帮助园艺叔叔把任务完成。看着大家干劲十足,卡卡西灵机一动,大声说道:“亲爱的小伙伴们,让我们来一场植树比赛吧。每人都有一个编号,植树都可以获得植树积分,最后评出植树积分最多的前三位小朋友和植树积分最少的后三位小朋友的编号(注意:最终每位小朋友获得的总植树积分不同,且求解的小朋友编号按升序排列),看看谁效率最高”“好!……”小朋友们一致赞同卡卡西的想法,大家鼓足了劲,奋力挥铲,都不想成为积分排名最后的小朋友。没一会功夫,小朋友们就把当天的树苗全部栽种完毕,每位小朋友都获得了相应的植树积分。下面,你们能帮助卡卡西,找出植树积分最多的前三位小朋友和植树积分最少的后三位小朋友的编号吗?
输入描述 Input Description
输入数据有2行,第1行一个数,表示小朋友个数,第2行有n个分别用空格分开的数,表示植树积分,第1个数对应编号为1的小朋友,第2个数对应编号为2的小朋友……其他小朋友编号依次类推,最后一个小朋友编号为n,测试数据能保证每位小朋友最终获得的总植树积分不同。
输出描述 Output Description
输出数据有2行,第1行为总植树积分排名前三的小朋友编号,第2行为排名后三名的小朋友编号。编号按升序排列。
样例输入 Sample Input
10 88 67 91 58 64 75 82 66 97 86
样例输出 Sample Output
1 3 9 4 5 8
数据范围及提示 Data Size & Hint
数据范围:
0<n<100000 0<积分<100000
各位大佬能不能帮忙给出代码啊!!!
思路也行,最好是代码
中级启示者
三次排序
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].scorn;
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
sort(a+1,a+4,cmp1);
sort(a+n-2,a+n+1,cmp1);
cout<<a[1].id<<" "<<a[2].id<<" "<<a[3].id<<endl;
cout<<a[n-2].id<<" "<<a[n-1].id<<" "<<a[n].id;
int n;
struct s{
int scorn;
int id;
}a[1000005];
bool cmp(s a,s b){
return a.scorn>b.scorn;
}
bool cmp1(s a,s b){
return a.id<b.id;
}