閱讀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的影響及其對硬件的配置需求