📄 cpp2.cpp
字号:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct contest
{
long gold,silver,copper;
char name[60];
}di[210];
struct team
{
char name[60];
long gold,silver,copper;
}ak[110];
struct school
{
long gold,silver,copper;
long team_num;
char name[60];
team tt[110];
}a[210];
int cmp_contest(const void *a,const void *b)
{
return (strcmp((*(contest *)a).name,(*(contest *)b).name));
}
int cmp_team(const void *a,const void *b)
{
if((*(team *)a).gold<(*(team *)b).gold)
return 1;
else
{
if((*(team *)a).gold>(*(team *)b).gold)
return -1;
else
{
if((*(team *)a).silver>(*(team *)b).silver)
return -1;
else
{
if((*(team *)a).silver<(*(team *)b).silver)
return 1;
else
{
if((*(team *)a).copper>(*(team *)b).copper)
return -1;
else
{
if((*(team *)a).copper<(*(team *)b).copper)
return 1;
else
{
return strcmp((*(team *)a).name,(*(team *)b).name);
}
}
}
}
}
}
}
int cmp_school(const void *a,const void *b)
{
if((*(school *)a).gold<(*(school *)b).gold)
return 1;
else
{
if((*(school *)a).gold>(*(school *)b).gold)
return -1;
else
{
if((*(school *)a).silver>(*(school *)b).silver)
return -1;
else
{
if((*(school *)a).silver<(*(school *)b).silver)
return 1;
else
{
if((*(school *)a).copper>(*(school *)b).copper)
return -1;
else
{
if((*(school *)a).copper<(*(school *)b).copper)
return 1;
else
{
return strcmp((*(school *)a).name,(*(school *)b).name);
}
}
}
}
}
}
}
int main()
{
long n,t,i,j,k,flag,t1,t2,t3,ca,temp1,temp2,tmp1,tmp2;
long school_num,contest_num,p,num;
char s1[60],s2[60],s3[60],s4[60];
char gold[]="gold",silver[]="silver",copper[]="copper";
scanf("%ld",&t);
for(ca=1;ca<=t;ca++)
{
scanf("%ld%*c",&n);
memset(a,0,sizeof(a));
memset(di,0,sizeof(di));
school_num=contest_num=0;
for(i=0;i<n+1;i++)
{
a[i].team_num=a[i].gold=a[i].silver=a[i].copper=0;
di[i].gold=di[i].copper=di[i].silver=0;
}
for(i=0;i<n;i++)
{
scanf("%s%s%s%s",s1,s2,s3,s4);
t1=t2=t3=0;
if(strcmp(gold,s3)==0)
{
t1++;
}
if(strcmp(silver,s3)==0)
{
t2++;
}
if(strcmp(copper,s3)==0)
{
t3++;
}
p=-1;
for(j=0;j<school_num;j++)
{
if(strcmp(a[j].name,s1)==0)
{
p=j;
break;
}
}
if(p==-1)//school not exist
{
num=school_num;
strcpy(a[num].name,s1);
strcpy(a[num].tt[a[num].team_num].name,s2);
if(t1)
{
a[num].tt[a[num].team_num].gold++;
a[num].gold++;
}
if(t2)
{
a[num].tt[a[num].team_num].silver++;
a[num].silver++;
}
if(t3)
{
a[num].tt[a[num].team_num].copper++;
a[num].copper++;
}
a[num].team_num++;
school_num++;
}
else//school exist at p
{
flag=-1;
for(j=0;j<a[p].team_num;j++)
{
if(strcmp(a[p].tt[j].name,s2)==0)
{
flag=j;
break;
}
}
if(flag==-1)//no such team at a[p]
{
strcpy(a[p].tt[a[p].team_num].name,s2);
if(t1)
{
a[p].tt[a[p].team_num].gold++;
a[p].gold++;
}
if(t2)
{
a[p].tt[a[p].team_num].silver++;
a[p].silver++;
}
if(t3)
{
a[p].tt[a[p].team_num].copper++;
a[p].copper++;
}
a[p].team_num++;
}
else
{
if(t1)
{
a[p].tt[flag].gold++;
a[p].gold++;
}
if(t2)
{
a[p].tt[flag].silver++;
a[p].silver++;
}
if(t3)
{
a[p].tt[flag].copper++;
a[p].copper++;
}
}
}
p=-1;
for(j=0;j<contest_num;j++)
{
if(strcmp(di[j].name,s4)==0)
{
p=j;
break;
}
}
if(p==-1)
{
strcpy(di[contest_num].name,s4);
if(t1)
di[contest_num].gold++;
if(t2)
di[contest_num].silver++;
if(t3)
di[contest_num].copper++;
contest_num++;
}
else
{
if(t1)
di[p].gold++;
if(t2)
di[p].silver++;
if(t3)
di[p].copper++;
}
}
printf("Case %ld:\n",ca);
printf("****************\n");
printf("school number: %ld\n",school_num);
qsort(a,school_num,sizeof(school),cmp_school);
for(j=0;j<school_num;j++)
{
if(j==0)
tmp1=tmp2=1;
else
{
if(a[j].gold==a[j-1].gold&&a[j].silver==a[j-1].silver&&a[j].copper==a[j-1].copper)
tmp2=tmp1;
else
tmp2=j+1;
}
printf("%s %ld %ld %ld %ld\n",a[j].name,tmp2,a[j].gold,a[j].silver,a[j].copper);
qsort(a[j].tt,a[j].team_num,sizeof(a[j].tt[0]),cmp_team);
tmp1=tmp2;
printf(" team number: %ld\n",a[j].team_num);
for(k=0;k<a[j].team_num;k++)
{
if(k==0)
temp1=temp2=1;
else
{
if(a[j].tt[k].gold==a[j].tt[k-1].gold&&a[j].tt[k].silver==a[j].tt[k-1].silver&&a[j].tt[k].copper==a[j].tt[k-1].copper)
{
temp2=temp1;
}
else
temp2=k+1;
}
printf(" %s %ld %ld %ld %ld\n",a[j].tt[k].name,temp2,a[j].tt[k].gold,a[j].tt[k].silver,a[j].tt[k].copper);
temp1=temp2;
}
}
printf("****************\n\n");
printf("contest number: %ld\n",contest_num);
qsort(di,contest_num,sizeof(di[0]),cmp_contest);
for(j=0;j<contest_num;j++)
{
printf("%s %ld %ld %ld\n",di[j].name,di[j].gold,di[j].silver,di[j].copper);
}
printf("****************\n");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -