cctv5在线直播世界杯|法国 世界杯|202兄弟世界杯情谊分享站|202brothers.com

足球联赛排名

本赛季足球联赛结束了。请根据比赛结果,给队伍排名。排名规则:

(1)先看积分,积分高的名次在前(每场比赛胜者得3分,负者得0分,平局各得1分);

(2)若积分相同,则看净胜球(该队伍的进球总数与失球总数之差),净胜球多的排名在前;

(3)若积分和净胜球都相同,则看总进球数,进球总数多的排名在前;

(4)若积分、净胜球和总进球数都相同,则队伍编号小的排名在前。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。

每组测试先输入一个正整数n(n<1000),代表参赛队伍总数。方便起见,队伍以编号1,2,……,n表示。然后输入n*(n-1)/2行数据,依次代表包含这n个队伍之间进行单循环比赛的结果,具体格式为:i j p q, 其中i、j分别代表两支队伍的编号(1≤i

输出格式:

对于每组测试数据,按比赛排名从小到大依次输出队伍的编号,每两个队伍之间留一个空格。

输入样例:

2

4

1 2 0 2

1 3 1 1

1 4 0 0

2 3 2 0

2 4 4 0

3 4 2 2

3

1 2 3 0

1 3 1 1

2 3 0 0

输出样例:

2 3 1 4

1 3 2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include

#include

int main()

{

int t,s;

scanf("%d",&t);

for(s=0;s

{

int n,hang;

scanf("%d",&n);

hang=n*(n-1)/2;

int i[hang],j[hang],p[hang],q[hang];

int course[n+1],jin[n+1],shi[n+1],ballsum[n+1];

int k,l;

for(k=0;k

{

scanf("%d%d%d%d",&i[k],&j[k],&p[k],&q[k]);

}

for(k=0;k

{

course[k]=0;jin[k]=0;shi[k]=0;ballsum[k]=0;

}//完成输入和初始化

for(k=0;k

{

int a=i[k],b=j[k];//a为前一队,b为后一队

int c=p[k],d=q[k];//c为a队进球数,d为b队进球数

if(c==d)

{

course[a]+=1;

course[b]+=1;

jin[a]+=c;shi[a]+=d;

jin[b]+=d;shi[b]+=c;

ballsum[a]+=c;

ballsum[b]+=d;

}

else if(c>d)

{

course[a]+=3;

jin[a]+=c;shi[a]+=d;

jin[b]+=d;shi[b]+=c;

ballsum[a]+=c;

ballsum[b]+=d;

}

else if(c

{

course[b]+=3;

jin[a]+=c;shi[a]+=d;

jin[b]+=d;shi[b]+=c;

ballsum[a]+=c;

ballsum[b]+=d;

}

}

int pure[n+1];

for(k=1;k<=n;k++)

pure[k]=jin[k]-shi[k];

//数据处理完成,进行排名即可

int team[n+1];

for(k=1;k

team[k]=k;

/*for(k=1;k<=n;k++)//源排名检测

{

printf("0:%d %d %d %d\n",course[k],pure[k],ballsum[k],team[k]);

}

printf("\n");*/

for(k=1;k

for(l=1;l

if(course[l]

{

int tp=course[l];

course[l]=course[l+1];

course[l+1]=tp;

tp=pure[l];

pure[l]=pure[l+1];

pure[l+1]=tp;

tp=ballsum[l];

ballsum[l]=ballsum[l+1];

ballsum[l+1]=tp;

tp=team[l];

team[l]=team[l+1];

team[l+1]=tp;

}//第一遍排course序完成

/*for(k=1;k<=n;k++)//排名检测

{

printf("1:%d %d %d %d\n",course[k],pure[k],ballsum[k],team[k]);

}

printf("\n");*/

int flag1=0;

for(k=1;k

if(course[k]==course[k+1])

{

flag1=1;

break;

}

if(flag1==1)

{

int max=course[1];

for(k=1;k<=n;k++,max=course[k])//第二遍排序

{//在第一遍排序基础上进行第二遍排序

for(l=k;course[l]==max;l++);

int x,y;

for(x=k;x

for(y=k;y

if(pure[y]

{

int tp=pure[y];

pure[y]=pure[y+1];

pure[y+1]=tp;

tp=ballsum[y];

ballsum[y]=ballsum[y+1];

ballsum[y+1]=tp;

tp=team[y];

team[y]=team[y+1];

team[y+1]=tp;

tp=course[l];

course[y]=course[y+1];

course[y+1]=tp;

}

k=l-1;

}

}//第二遍排序完成

/*for(k=1;k<=n;k++)//排名检测

{

printf("2:%d %d %d %d\n",course[k],pure[k],ballsum[k],team[k]);

}

printf("\n");*/

int flag2=0;

for(k=1;k

if(pure[k]==pure[k+1])

{

flag2=1;

break;

}

if(flag2==1)

{

int max=pure[1];

for(k=1;k<=n;k++,max=pure[k])//第二遍排序

{//在第二遍排序基础上进行第三遍排序

for(l=k;pure[l]==max;l++);

int x,y;

for(x=k;x

for(y=k;y

if(ballsum[y]

{

int tp=ballsum[y];

ballsum[y]=ballsum[y+1];

ballsum[y+1]=tp;

tp=pure[y];

pure[y]=pure[y+1];

pure[y+1]=tp;

tp=team[y];

team[y]=team[y+1];

team[y+1]=tp;

tp=course[l];

course[y]=course[y+1];

course[y+1]=tp;

}

k=l-1;

}

}//第三遍排序完成

/*for(k=1;k<=n;k++)//排名检测

{

printf("3:%d %d %d %d\n",course[k],pure[k],ballsum[k],team[k]);

}

printf("\n");*/

int flag3=0;

for(k=1;k

if(ballsum[k]==ballsum[k+1])

{

flag3=1;

break;

}

if(flag3==1)

{

int max=team[1];

for(k=1;k<=n;k++,max=team[k])//第二遍排序

{//在第三遍排序基础上进行第四遍排序

for(l=k;team[l]==max;l++);

int x,y;

for(x=k;x

for(y=k;y

if(team[y]>team[y+1])

{

int tp=team[y];

team[y]=team[y+1];

team[y+1]=tp;

tp=ballsum[y];

ballsum[y]=ballsum[y+1];

ballsum[y+1]=tp;

tp=pure[y];

pure[y]=pure[y+1];

pure[y+1]=tp;

tp=course[l];

course[y]=course[y+1];

course[y+1]=tp;

}

k=l-1;

}

}//第四遍排序完成

/*for(k=1;k<=n;k++)//排名检测

{

printf("4:%d %d %d %d\n",course[k],pure[k],ballsum[k],team[k]);

}

printf("\n");*/

for(k=1;k<=n;k++)//排完序后输出team数组即可

{

printf("%d",team[k]);

if(k+1<=n)

printf(" ");

}

printf("\n");

}

return 0;

}