网易游戏4.17笔试LJ
3327
2022.04.17
发布于 未知归属地

第一题
给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;
        }
    }

有大佬贴贴第二题和第三题的答案嘛

评论 (12)