zoukankan      html  css  js  c++  java
  • ECNU 2977 成绩排序

    ECNU 2977 成绩排序

    链接

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

    题目

    单点时限: 2.0 sec

    内存限制: 256 MB

    C 语言课程的上机考试有 M 道题目,从第 1 题至第 M 题每道题的分值为 均为大于的正整数

    现给定分数线,请编写程序输出不低于该分数线的学生人数,并将他 (她) 们的成绩按降序输出,若有多名学生考试成绩相同,则按他 (她) 们学号的升序输出。

    输入格式
    第 1 行:一个整数 () 为问题数。

    对于每组测试数据:

    第 行是三个正整数:学生人数、考试题目数 、分数线

    第 行有 个正整数:分别为第 题至第 题的分值,,;

    接下来 N 行,每行给出一名学生的学号(长度为 的字符串,学号的第一个字符可能为 )、该学生解出的题目总数 、以及这 道题的题号(题号由 到 )。

    输出格式
    对于每个问题,输出一行问题的编号( 开始编号,格式:case #0: 等)

    然后首先在一行中输出不低于分数线的学生人数,接下来每行按考试成绩从高到低输出上分数线的学生的学号与成绩,其间用 1 个空格分隔。若有多名学生成绩相同,则按他 (她) 们学号的升序输出。

    样例
    input
    3
    4 5 25
    10 10 12 13 15
    10091130015 3 5 1 3
    10091130013 5 2 4 1 3 5
    10091130012 2 1 2
    10091130011 3 2 3 5
    2 3 20
    10 10 10
    10101130012 0
    10101130019 2 1 2
    1 2 40
    10 30
    10101130018 1 2
    output
    case #0:
    3
    10091130013 60
    10091130011 37
    10091130015 37
    case #1:
    1
    10101130019 20
    case #2:
    0

    思路

    比较繁琐的一道题,输入,控制限制条件,统计学生分数,排序,再按照高于分数线的学生数目输出。

    代码

      public static class Stu {
    
        public String id;
        public int sco;
    
        public Stu(String id, int sco) {
          this.id = id;
          this.sco = sco;
        }
      }
    
      public static void fun() {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int temp = 0; temp < t; temp++) {
          int n = sc.nextInt();
          int m = sc.nextInt();
          int g = sc.nextInt();
          int count = 0;
          int[] a = new int[m];
          for (int i = 0; i < m; i++) {
            a[i] = sc.nextInt();
          }
          Stu[] s = new Stu[n];
          for (int i = 0; i < n; i++) {
            int sum = 0;
            String id = sc.next();
            int timu = sc.nextInt();
            for (int j = 0; j < timu; j++) {
              int tt = sc.nextInt();
              sum += a[tt - 1];
            }
            if (sum >= g) {
              count++;
            }
            s[i] = new Stu(id, sum);
          }
          Arrays.sort(s, new Comparator<Stu>() {
            @Override
            public int compare(Stu o1, Stu o2) {
              if (o1.sco != o2.sco) {
                return o2.sco - o1.sco;
              } else {
                StringBuffer sb1 =new StringBuffer(o1.id);
                StringBuffer sb2 =new StringBuffer(o2.id);
                for(int i=0;i<sb1.length();i++)
                {
                  if(sb1.charAt(i)!=sb2.charAt(i)){
                    return sb1.charAt(i)-sb2.charAt(i);
                  }
                }
                return 1;
              }
            }
          });
          System.out.println("case #" + temp + ":");
          System.out.println(count);
          for (int i = 0; i < count; i++) {
            System.out.println(s[i].id + " " + s[i].sco);
          }
        }
      }
    
    
  • 相关阅读:
    Python2 to python3
    【python-HTMLTestRunner】生成HTMLTestRunner报告报错ERROR 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
    【python-HTMLTestRunner】HTMLTestRunner测试报告中文乱码问题解决
    【python-ini】python读写ini文件
    【python-字典】判断python字典中key是否存在的
    【python 字典、json】python字典和Json的相互转换
    【python3+request】python3+requests接口自动化测试框架实例详解教程
    【python-crypto】导入crypto包失败的情况,怎么处理
    【python-excel】Selenium+python自动化之读取Excel数据(xlrd)
    【滚动条】Selenium+python自动化-JS处理滚动条
  • 原文地址:https://www.cnblogs.com/blogxjc/p/14332272.html
Copyright © 2011-2022 走看看