九度題目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