hdu 2093
结构体排序
struct student
{
char name[20];
int AC,time;
}
首先按照AC,time,如果前两个都相同就按照name的字典序排序。
这个读入很简单,sscanf();这个函数还不会用。
输出需要名字占10,靠左,则用“%-10s”
直接贴代码:WA了一次,中间调试输出的东西忘记删除了。
总结:字符串类题目还是要自己做做,虽然有些很恶心,恶心两次就好了!哈哈,
#include<stdio.h>
#include<string.h>
#include<math.h>
struct student
{
char name[20];
int AC,time;
} p[1005],temp,tt;
int tot;
int cmp(student a,student b)
{
if (a.AC>b.AC)
return 1;
if (a.AC==b.AC&&a.time<b.time)
return 1;
int i=0;
while (a.AC==b.AC&&a.time==b.time&&i<strlen(a.name)&&i<strlen(b.name))
{
if (a.name[i]<b.name[i])
return 1;
i++;
}
return 0;
}
int qsort(int l,int r) //自己还是不习惯条用stl里的sort()
{
int i,j;
i=l;
j=r;
temp=p[(i+j)/2];
while (i<=j)
{
while (i<=j&&cmp(p[i],temp)) i++;
while (i<=j&&cmp(temp,p[j])) j--;
if (i<=j)
{
tt=p[i];
p[i]=p[j];
p[j]=tt;
i++;
j--;
}
}
if (l<j) qsort(l,j);
if (i<r) qsort(i,r);
return 0;
}
int main()
{
int n,m,i,j,tmp;
char ch;
scanf("%d%d",&n,&m);
tot=0;
while (scanf("%s",&p[0].name)==1&&p[0].name[0]!='0')
{
tot++;
p[tot]=p[0];
p[tot].AC=0;
p[tot].time=0;
for (i=1; i<=n ; i++ )
{
scanf("%d",&tmp);
if (tmp>0)
{
p[tot].AC++;
p[tot].time+=tmp;
ch=getchar();
if (ch=='(')
{
scanf("%d",&tmp);
p[tot].time+=m*tmp;
getchar();
}
}
}
}
qsort(1,tot);
for (i=1; i<=tot ; i++ )
{
printf("%-10s %2d %4d\n",p[i].name,p[i].AC,p[i].time);
}
return 0;
}