组队
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
ACMers在参加校赛、省赛、以及亚洲区域赛都是以三人一组进行比赛,现ACM队中有n个ACMers,每个ACMer都有自己的算法深度值;明年省赛就要到来,要每三个人组队去比赛,如果组队的ACMer的算法深度值总和越高,越有可能得到奖牌,现在让你对这些队员进行组队,找到一组最有可能得到奖牌的一组。
-
输入
-
输入包含多组测试数据,每组数据包含两行,
第一行输出n(代表有n个ACMers)第二行输出n个ACMers的算法深度值i(其中3<=n<50,0<i<=10)
输出
- 输出这队ACMers的编号以及他们这队ACMers的算法总深度值(如果有多组算法总深度相等,则输出编号之和最小的一组,并且编号按从小到大输出) 样例输入
-
4 1 2 3 4 6 1 1 4 8 2 1
样例输出
-
2 3 4 9 3 4 5 14
-
输入包含多组测试数据,每组数据包含两行,
比较简单的一道题,比较简单的做法就是先排一次序,把权值最大而且编号较小的元素排序到前三个位置,然后再次排序恢复之前的顺序,按顺序输出,并且统计总和就可以了,第一遍写的时候因为考虑不周到,后来想了想,才发现自己忘了考虑编号最小了......果断修改再次提交,然后wa和ac一起判断出来(我这是吐槽oj卡吗...呃呃呃..).........
#include<stdio.h>
#include<algorithm>
using namespace std;
struct zd
{
int id,v;
}x[55];
int cmp1(zd a,zd b)//第一次排序
{
if(a.v==b.v)
{
return a.id<b.id;
}
return a.v>b.v;
}
int cmp2(zd a,zd b)//第二次排序
{
return a.id<b.id;
}
int main()
{
int i,n;
while(~scanf("%d",&n))
{
for(i=0;i<n;++i)
{
scanf("%d",&x[i].v);//赋值和输入
x[i].id=i+1;
}
sort(x,x+n,cmp1);
sort(x,x+3,cmp2);
int sum=0;
for(i=0;i<3;++i)//边输出边统计
{
printf("%d ",x[i].id);
sum+=x[i].v;
}
printf("%d\n",sum);
}
return 0;
}