zoukankan      html  css  js  c++  java
  • ECNU 1829 发愁

    ECNU 1829 发愁

    链接

    https://acm.ecnu.edu.cn/problem/1829

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    大家来到小强家,发现小强正发愁,原来小强正为 “ACM 足球超级联赛 ” 的排名而发愁。

    既然过生日,就应该开开心心的,所以作为超级程序员的你应当挺身而出!

    所以请你,天才程序员帮下忙,写个程序根据比赛情况计算出各队排名。

    输入格式
    有多组测试数据。

    每组数据先输入两个整数 n 和 m , 代表球队数量, 代表比赛场数。

    接下来 m 行,每行有三个数 abc。 ab 表示球队的编号。

    c=1 ,表示 ‘a 胜 b’;

    c=-1 ,表示 ‘b 胜 a’;

    c=0 ,表示 ‘a、b 战成平局’。

    胜者球队积分加 3 分,负者球队积分扣 1 分,平局双方各加 1 分。

    (输入不会有自己打自己的情况,两个队之间可能有多场比赛)

    表示输入结束,不用处理这组数据。

    每个球队的初始积分为0。

    输出格式
    在一行中按照排名输出各队的编号,每个数的后面输出一个空格,最后一个数后面没有空格。

    排名规则:

    1: 积分高的队排前面。

    2: 积分一样的队胜场数多的排前面。

    3: 积分一样且胜场数一样的队负场数少的排前面。

    4: 若还不能分出先后,编号小的排前面。

    样例
    input
    4 4
    1 2 1
    2 1 1
    3 4 1
    3 4 -1
    4 1
    1 3 -1
    4 1
    3 2 0
    4 4
    4 1 1
    3 2 0
    3 2 0
    3 1 0
    4 2
    3 1 1
    1 4 0
    0 0
    output
    1 2 3 4
    3 2 4 1
    2 3 1 4
    4 3 2 1
    3 4 2 1

    思路

    也是个比较问题,就直接用类模拟一下,team里面有num是编号,winloss是胜败场次,score是分数,输入时注意,数组从0开始,编号从1开始,所以要-1,最后输出时候+1.
    之后就是,优先比较分数,再比较胜场,再比较败场,最后比较编号即可。

    代码

    public static class Team {
    
        public int num;
        public int win;
        public int lose;
        public int score;
    
        public Team(int num) {
          this.num = num;
          this.win = 0;
          this.lose = 0;
          this.score = 0;
        }
      }
    
      public static void fun() {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
          int n = sc.nextInt();
          int m = sc.nextInt();
          if (n == 0 && m == 0) {
            return;
          }
          Team[] team = new Team[n];
          for (int i = 0; i < n; i++) {
            team[i] = new Team(i);
          }
          for (int i = 0; i < m; i++) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int c = sc.nextInt();
            a--;
            b--;
            if (c == 1) {
              team[a].win++;
              team[a].score += 3;
              team[b].lose++;
              team[b].score -= 1;
            } else if (c == -1) {
              team[b].win++;
              team[b].score += 3;
              team[a].lose++;
              team[a].score -= 1;
            } else {
              team[a].score++;
              team[b].score++;
            }
          }
    
          Arrays.sort(team, new Comparator<Team>() {
            @Override
            public int compare(Team o1, Team o2) {
              if (o1.score != o2.score) {
                return o2.score - o1.score;
              } else if (o1.win != o2.win) {
                return o2.win - o1.win;
              } else if (o1.lose != o2.lose) {
                return o1.lose - o2.lose;
              } else {
                return o1.num - o2.num;
              }
            }
          });
    
          for (int i = 0; i < n; i++) {
            System.out.print(team[i].num + 1);
            if (i != n - 1) {
              System.out.print(" ");
            }
          }
          System.out.println();
        }
      }
    
  • 相关阅读:
    解析数据库xml格式字段
    Spring切面表达式,hibernate,struts
    常见枚举
    经典冒泡排序,九九乘法表,三角形
    拦截器后台安全验证
    Oracle 将表中多条数据同一字段拼成一列显示
    idea 11 控制台日志乱码
    BigDecimal 分转元,元转分
    currtDownLatch可能会出现的三个问题
    CountDownLatch用法
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14309324.html
Copyright © 2011-2022 走看看