• Java实现 蓝桥杯 算法提高 特等奖学金(暴力)


    试题 算法提高 特等奖学金

    问题描述
      土豪大学每年都会给学生颁发巨额的特等奖学金,当然,获奖的前提是要足够优秀。这所大学有n名学生,他们中的每个人都会在m门必修课的每门课上获得一个百分制的整数成绩(0-100),到了期末教务长会获得所有学生在所有必修课上的成绩报告,他会从中挑选出最优秀的k位学生,并给他们颁发奖学金。
      教务长认为,某个学生只要有一门课不及格(分数<85),他就丧失了获得奖学金的资格。教务长会给所有科目按照重要性排序,在所有拥有获得奖学金资格的学生中,教务长更喜欢在更重要的科目中取得高分的学生,并依此将学生排序(即对于某两名学生,在最重要的科目中取得更高分的学生排在前面;如果两人在最重要的科目中取得相同的分数,则比较次重要的科目;若再相同则比较第三重要的科目……一直下去)。
      以前土豪大学的学生数量并不多,教务长就用纸笔计算谁将获得奖学金;今年大学扩招了,教务长意识到用纸笔计算太复杂了,你能帮他解决这个问题吗?说不定教务长高兴了就给你也发一份奖学金(⊙o⊙)哦!(注意:获奖学生数量可能小于k)
    输入格式
      输入数据第一行为三个整数n、m、k,用空格隔开;第二行至第(n+1)行是学号分别为1、2……n的同学的m门课的成绩(m门课已按重要性排序),用空格隔开(输入保证每两人的分数不完全相同)。
    输出格式
      输出一行为获奖同学的学号,按排名从前到后排序,用空格隔开。
    样例输入
    10 2 7
    99 87
    96 79
    93 99
    88 88
    90 87
    90 86
    90 88
    88 90
    91 100
    100 85
    样例输出
    10 1 3 9 7 5 6
    数据规模和约定
      0<n≤1000,0<m≤100,0<k≤n

     
    
    import java.util.*;
    
    public class Main {
        static class Node implements Comparable<Node> {
            int id;
            int[] Score;
    
            @Override
            public int compareTo(Node node) {
                for (int i=0;i<Score.length;i++){
                    if (this.Score[i] != node.Score[i]) {
                        return this.Score[i] - node.Score[i];
                    }
                }
                return 0;
            }
        }
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int m = sc.nextInt();
            int k = sc.nextInt();
            int temp=0;
            Node node;
            int[] score;
    //        Node[] nodes = new Node[n];
            ArrayList<Node> nodes = new ArrayList<>();
           A: for (int i=0; i<n; i++) {
                boolean flag = false;
                node=new Node();
               node.id=i+1;
               score=new int[m];
                for (int j=0; j<m; j++) {
                    temp=sc.nextInt();
                    if (temp<85) flag = true;
                    score[j]=temp;
                }
                if(flag) continue A;
               node.Score=score;
                nodes.add(node);
            }
            sc.close();
            Collections.sort(nodes);
            for (int i=nodes.size()-1; i>=0 && i>=nodes.size()-k; i--){
                System.out.print(nodes.get(i).id+" ");
            }
        }
    }
    
    
  • 相关阅读:
    NEC 框架规范 css reset
    NEC 工程师规范
    NEC html规范
    【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧
    【bzoj1562】【[NOI2009]变换序列】匈牙利算法的性质利用
    【bzoj4808】【马】二分图最大点独立集+简单感性证明
    【hdu1150】【Machine Schedule】二分图最小点覆盖+简单感性证明
    【bzoj4950】【 [Wf2017]Mission Improbable】贪心+二分图匹配
    【bzoj4443】【[Scoi2015]小凸玩矩阵】二分+二分图最大匹配
    【bzoj1977】【严格次小生成树】倍增维护链上最大次大值
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13074613.html
Copyright © 2020-2023  润新知