题目:http://acm.hdu.edu.cn/showproblem.php?pid=2115
#include <stdio.h>
#include <string.h>
typedef struct{
char name[30];
char time[30];
int mm,ss;
}aa;
aa player[13],a;
void deal(int pos,int num)//从pos开始的num位比大小,共num+1位
{
int i,j;
for(i=pos;i<pos+num-1;i++)
for(j=pos+1;j<pos+num;j++)
if(strcmp(player[i].name,player[j].name)>0) {
a=player[i];
player[i]=player[j];
player[j]=a;
}
}
int main()//low爆的我,幸好能AC
{
int n,i,j,count=1,flag=0;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
if(flag==1) printf("\n");
flag=1;
for(i=0;i<n;i++)
{
scanf("%s %s",player[i].name,player[i].time);
player[i].mm=(player[i].time[0]-'0')*10+player[i].time[1]-'0';
player[i].ss=(player[i].time[3]-'0')*10+player[i].time[4]-'0';
}
for(i=0;i<n-1;i++)//比时间大小
for(j=i+1;j<n;j++)
{
if((player[i].mm>player[j].mm)||((player[i].mm==player[j].mm)&&(player[i].ss>player[j].ss))) {
a=player[i];
player[i]=player[j];
player[j]=a;
}
}
printf("Case #%d\n",count++);
for(i=0;i<n-1;) //名字字典序
{
int num=0;
for(j=i+1;j<n;j++)
if((player[i].mm==player[j].mm)&&(player[i].ss==player[j].ss)) {
i++;num++;
}
else break;
if(num==0) i++;
else deal(i,num);
}
int rank=0;
for(i=0;i<n;i++)//排名rank
{
printf("%s ",player[i].name);
if(i>0&&player[i].mm==player[i-1].mm&&player[i].ss==player[i-1].ss)
printf("%d\n",rank);
else {
rank++;
printf("%d\n",i+1);
}
}
}
return 0;
}