足球联赛排名
本赛季足球联赛结束了。请根据比赛结果,给队伍排名。排名规则:
(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; }