阅读844 返回首页    go 阿里云 go 技术社区[云栖]


九度题目1339:ACM

题目1339:ACM(25分)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:599
解决:315
题目描述:
今年的ACM世界总决赛快要开始了,需要有一个排名算法来对每支队伍进行现场排名。

ACM组委会把这个任务交给了你,相信你一定能很好地完成。
 排名规则如下:通过题的数目多的队伍排名靠前,如果有多支队伍过的题的数目相同

,则罚时少的队伍排名靠前。

输入:
输入的第一行包括一个整数N(1<=N<=100),代表参加比赛的队伍的个数。
 接下来的N行每行包括一个字符串和两个整数num,punish,它们之间用空格隔开。其中

,第一个字符串代表参赛的队伍名称(字符串的长度1<=len<=101),num代表这个学校过

了的题目个数(1<=num<=11),punish代表这个学校的罚时(1<=punish<=1000)。

输出:
请按题目描述的规则对所有队伍进行排序,并按照从高到低的顺序对队伍的名称进行输

出。当然可能存在多支队伍,不仅通过题目数量相同,而且罚时相同。虽然这些队伍最

后排名是相同的,但是你输出时需要按照队伍名称的字典序进行输出,比如,队伍aa和

队伍ba,你需要先输出aa,然后输出ba,因为aa的字典序比ba的靠前。

样例输入:
4
RealPlayers 3 100
Potatoes 5 30
blue_sky 7 800
3D_magic_cube 5 50

样例输出:
blue_sky
Potatoes
3D_magic_cube
RealPlayers

 

sort排序水一下

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
   char name[200];
   int num,punish;    
}a[200];
int cmp(node x,node y)
{
    if(x.num!=y.num) return x.num>y.num;
    if(x.punish!=y.punish) return x.punish<y.punish;
    if(strcmp(x.name,y.name)!=0) return strcmp(x.name,y.name)<0;
}
int main()
{
    int i,j,n,m;
    scanf("%d",&n);
    getchar();
    memset(a,0,sizeof(a));
    for(i=0;i<n;i++)
    scanf("%s %d %d",&a[i].name,&a[i].num,&a[i].punish);
    sort(a,a+n,cmp);
    for(i=0;i<n;i++)
    printf("%s\n",a[i].name);
    return 0;
} 

最后更新:2017-04-03 12:56:23

  上一篇:go python新手常犯错误
  下一篇:go Memcached缓存大数据时对服务器内存、CPU的影响及其对硬件的配置需求