足球联赛(模拟)
题目描述
小明热爱足球,也热爱家乡球队1队。新的一年足球联赛又开始了,共n个球队,进行双循环比赛。双循环比赛是指每个球队与其他n-1只队伍分别踢两场正式比赛,就是主场和客场比赛。如下图,在n=3的情况下,表示3只球队,共6场比赛。
第i行有n-1场比赛,表示球队i所踢的n-1场主场比赛。第i列就是队i的n-1场客场比赛。上表中第一行表示队1在主场4:3战胜了队2,在与队3的对比赛中1:2不敌对手;而客场比赛与队2战成0:0平,又以2:1战胜了队3。
根据足球联赛的得分规则,以双方进球多少评判比赛胜负,比赛战平(进球数一样多),双方各得1分;如果比赛分出胜负,那么获胜方(进球多的)得到3分,输的那方不得分。
队1在主场一胜一负,得到3分,在客场一胜一平,得到4分。队1的总积分为7分。
队2在主场一胜一平,得到4分,在客场一平一负,得到1分,队2的总积分为5分。
队3总得分为4分
因此,队1分数最高,可以获得冠军。联赛规定,若有多个得分最高的队伍,他们将分享冠军的荣誉,同时获得冠军。
现在小明想要知道,在看完并记录下所有比赛后,家乡球队队1能否获得冠军,并计算出队1赛季总积分。
输入
第一行一个整数n,表示参加联赛的球队数量,小明支持的就是队1。
接下来n行,每行n*2个整数,第i行第j对整数表示队i在主场对阵队j的比赛情况,两个整数分别表示主队(队i)和客队(队j)的进球数。当i=j的时候,两个整数用-1表示,自己和自己踢球的情况是不存在的。
输出
若队1夺冠,那么在第一行输出“Yes”;若1队的总积分不是最高的,那么在第一行输出“No”。
第二行输出一个整数,表示队1的赛季总积分。
样例输入
【样例1】 3 -1 -1 4 3 1 2 0 0 -1 -1 3 0 1 2 1 1 -1 -1 【样例2】 2 -1 -1 2 2 3 0 -1 -1
样例输出
【样例1】 Yes 7 【样例2】 No 1
提示
样例2解释
共2个球队,踢2场比赛,第一场队1在主场和队2打成平手,第二场队2在主场3:0战胜队1。队1一平一负积1分,队2一胜一平得4分。队1没有夺冠,积分为1分。
思路:模拟题跟着敲就行了,比赛的时候判题有问题,一直WA....好在最后重判了,附上AC代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main
{
public static void main(String[] argc)
{
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int [][] race = new int[n][n * 2];
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n * 2; ++j)
{
race[i][j] = in.nextInt();
}
}
int [] score = new int[n];
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n * 2; j += 2)
{
if(race[i][j] == -1) continue;
if(race[i][j] > race[i][j + 1])
{
score[i] += 3;
}
else if(race[i][j] == race[i][j + 1])
{
score[i] += 1;
score[j / 2] += 1;
}
else
{
score[j / 2] += 3;
}
}
}
int pos = 0;
int max = 0;
for(int i = 0; i < n; ++i)
{
if(score[i] > max)
{
max = score[i];
pos = i + 1;
}
}
if(pos == 1)
System.out.println("Yes\n" + score[0]);
else
System.out.println("No\n" + score[0]);
}
}