第一题
给6行每一个国家的 名字 积分 进球数 丢球数
给3行最后比赛的结果 名字1 名字2 进球1 进球2
输出排名后
排名规则 积分>净进球数(进球-丢球)>进球数>字典序名字
属于是代码山了
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
// T组数据
int T=sc.nextInt();
int lastGoalsS=6;
int lastForC=3;
for (int k = 0; k < T; k++) {
List<Team> teams=new ArrayList<>();
List<FightTeam> fightTeams=new ArrayList<>();
Map<String,Team> table=new HashMap<>();
for (int i = 0; i < lastGoalsS; i++) {
Team team=new Team();
team.name=sc.next();
team.points=sc.nextInt();
team.inGoals=sc.nextInt();
team.failGoals=sc.nextInt();
teams.add(team);
table.put(team.name,team);
}
for (int i = 0; i < lastForC; i++) {
FightTeam fightTeam=new FightTeam();
fightTeam.owner=sc.next();
fightTeam.failOwner=sc.next();
fightTeam.ownerGoal=sc.nextInt();
fightTeam.failOwnerGoals=sc.nextInt();
fightTeams.add(fightTeam);
}
for (FightTeam fightTeam:fightTeams) {
if (fightTeam.ownerGoal>fightTeam.failOwnerGoals) {
Team team1 = table.get(fightTeam.owner);
Team team2=table.get(fightTeam.failOwner);
team1.points+=3;
team1.inGoals+=fightTeam.ownerGoal;
team2.inGoals+=fightTeam.failOwnerGoals;
team1.failGoals+=fightTeam.failOwnerGoals;
team2.failGoals+=fightTeam.ownerGoal;
table.put(fightTeam.owner,team1);
table.put(fightTeam.failOwner,team2);
}else if (fightTeam.ownerGoal<fightTeam.failOwnerGoals) {
Team team1 = table.get(fightTeam.owner);
Team team2=table.get(fightTeam.failOwner);
team2.points+=3;
team2.inGoals+=fightTeam.failOwnerGoals;
team1.inGoals+=fightTeam.ownerGoal;
team1.failGoals+=fightTeam.failOwnerGoals;
team2.failGoals+=fightTeam.ownerGoal;
table.put(fightTeam.owner,team1);
table.put(fightTeam.failOwner,team2);
}else {
Team team1 = table.get(fightTeam.owner);
Team team2 = table.get(fightTeam.failOwner);
team1.points+=1;
team2.points+=1;
team1.inGoals+=fightTeam.ownerGoal;
team1.failGoals+=fightTeam.failOwnerGoals;
team2.inGoals+=fightTeam.failOwnerGoals;
team2.failGoals+=fightTeam.ownerGoal;
table.put(fightTeam.owner,team1);
table.put(fightTeam.owner,team2);
}
}
teams.sort(new Comparator<Team>() {
public int compare(Team o1, Team o2) {
if (o1.points!=o2.points){
return o2.points-o1.points;
}else{
int goal1=o1.inGoals-o1.failGoals;
int goal2=o2.inGoals-o2.failGoals;
if (goal1!=goal2) return goal2-goal1;
else {
int goal3=o1.inGoals;
int goal4=o2.inGoals;
if (goal3!=goal4) return goal4-goal3;
else {
return o1.name.compareTo(o2.name);
}
}
}
}
});
for (Team t:teams) {
System.out.print(t.name);
System.out.print(" ");
System.out.print(t.points);
System.out.print(" ");
System.out.print(t.inGoals);
System.out.print(" ");
System.out.print(t.failGoals);
System.out.println();
}
System.out.println("END");
}
}
static class Team {
String name;//队伍名称
int points;//积分数
int inGoals;//进球数
int failGoals;//丢球数
}
static class FightTeam{
String owner;
String failOwner;
int ownerGoal;
int failOwnerGoals;
}第二题
属于是没有看题了
第三题
给一个地图,从E走到S,地图上有障碍物W,地图上有监控M,不能停在监控,但是可以跨过监控,求得最少的回合数
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
// 数组组数
int T=sc.nextInt();
for (int k = 0; k < T; k++) {
// n行
int N=sc.nextInt();
// m代表每行的字符串长度
int M=sc.nextInt();
// 最大能走的步数
int K=sc.nextInt();
Point start=new Point();
Point end=new Point();
char [][]chars=new char[N][M];
visited=new int[N][M];
// 初始化地图
for (int i = 0; i < N; i++) {
String str=sc.next();
for (int j = 0; j < M; j++) {
char c=str.charAt(j);
if (c=='S') start=new Point(i,j);
if (c=='E') end=new Point(i,j);
chars[i][j]=c;
}
}
boolean [][]flag=new boolean[N][M];
Point point = dfs(start.x, start.y, chars, end, K, flag);
if (point.isCanGo){
System.out.println(point.minCost);
}else System.out.println(-1);
}
}
static int visited[][];
// 返回的是走到目标位置最短回合数
public static Point dfs(int x,int y,char[][] chars,Point target,int k,boolean[][]flags) {
Point p=new Point();
if (x>=chars.length||y>=chars[0].length||x<0||y<0||chars[x][y]=='M'
||visited[x][y]==-1||flags[x][y]==true) {
p.isCanGo=false;
return p;
}
if (chars[x][y]=='W'){
p.isCanGo=false;
p.hasBarrier=true;
return p;
}
if (visited[x][y]!=0){
p.isCanGo=true;
p.minCost=visited[x][y];
return p;
}
if (x==target.x&&y==target.y){
p.isCanGo=true;
p.minCost=0;
return p;
}
int min=Integer.MAX_VALUE;
flags[x][y]=true;
for (int i = 1; i <= k; i++) {
Point bottom = dfs(x + i, y, chars, target, k,flags);
if (bottom.isCanGo){
min=Math.min(min,bottom.minCost);
}
if (bottom.hasBarrier)break;
}
for (int i = 1; i <= k; i++) {
Point top=dfs(x-i,y,chars,target,k,flags);
if (top.isCanGo){
min=Math.min(min,top.minCost);
}
if (top.hasBarrier)break;
}
for (int i = 1; i <= k; i++) {
Point left=dfs(x,y-i,chars,target,k,flags);
if (left.isCanGo){
min=Math.min(min,left.minCost);
}
if (left.hasBarrier)break;
}
for (int i = 1; i <= k; i++) {
Point right=dfs(x,y+i,chars,target,k,flags);
if (right.isCanGo){
min=Math.min(min,right.minCost);
}
if (right.hasBarrier)break;
}
flags[x][y]=false;
if (min==Integer.MAX_VALUE){
visited[x][y]=-1;
p.isCanGo=false;
return p;
}
p.isCanGo=true;
p.minCost=min+1;
visited[x][y]=min+1;
return p;
}
static class Point {
int x;
int y;
boolean isCanGo;
int minCost;
boolean hasBarrier;
Point(){
}
Point(int x,int y) {
this.x=x;
this.y=y;
}
}
有大佬贴贴第二题和第三题的答案嘛