简单的ACM问题
我们知道,每一年的ACM/ICPC亚洲地区现场赛赛都会有很多很多个代表队参赛,于是,怎么把这些队伍排序成了组织者最头疼的问题。后来,他们终于想出了解决方案,那就是——按照网络赛的做题数排序,如果做题数一样再按罚时排序,如果罚时又是一样的,那就只能按照学校名字的字典序排序了 他们规定:
1、做题数多的排在前面;
2、罚时少的排在前面
3、名字按字母ASCII码值升序排列,如果第一个字母一样就比较第二个字母,以此类推
Input
Line 1:一个数N(1<= N <= 500),代表进入现场赛的学校数
Line 2 - N + 1:队伍的名字(不含空格,由大小写字母组成,长度不超过50)、做题数(正整数)、罚时(正整数)
输入数据保证不出现三者完全一样的数据
(题目包含多组数据)
Output
按输入的格式把队伍排序后输出,case之间输出空行
Sample Input
2
TeamA 3 200
TeamB 4 500
Sample Output
TeamB 4 500
TeamA 3 200
我的代码:
#include<stdio.h>
void main()
{
int N;
char *a[20],*temp;
int i,j,k,flag;
int b[20],c[20];
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%s",a[i]); //我知道我这是输入的时候发生了问题,但是我不知道该如何修改 想了好久都还是没想出办法修改
scanf("%d",&b[i]);
scanf("%d",&c[i]);
}
************************** 下面的代码是比较队的名字的大小的, 我知道应该先比较题目数,然后再比较时间 但是比较出来 如何把较多题目 和时间较小的下标排好序输出呢?? 请大侠指教一下 或者帮我修改一下代码 我刚接触acm几天 有不好的地方请见谅 *********************
for(i=0;i<N;i++)
{
k=i;
for(j=0;j<N-i;j++)
if(strcmp(a[k],a[j])>0)
k=j;
if(k!=i)
{
temp=a[i];
a[i]=a[k];
a[k]=temp;;
}
printf("%s\n",a[i]);
getchar();
getchar();
}
}