zoukankan      html  css  js  c++  java
  • hdu 1236 排名

    import java.util.Scanner;
    
    public class Main {
    	private static int[] array = null;
    
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = 0, m = 0, g = 0;
    		int count = 0;// 记数
    		while (sc.hasNext()) {
    			// 输入第一行
    			n = sc.nextInt();
    			if (n == 0) {
    				return;
    			}
    			m = sc.nextInt();
    			g = sc.nextInt();
    			// 输入第二行
    			array = new int[m];
    			for (int i = 0; i < array.length; i++) {
    				array[i] = sc.nextInt();
    			}
    			// 输入n行,用内部类打包成一个对象
    			count = 0;// 初始化计数变量
    			Student[] stus = new Student[n];
    			for (int i = 0; i < stus.length; i++) {
    				stus[i] = new Student();// 造内存
    				stus[i].id = sc.next();// 不要接收回车符
    				stus[i].questions = sc.nextInt();
    				stus[i].mat = new int[stus[i].questions];
    				for (int j = 0; j < stus[i].questions; j++) {
    					stus[i].mat[j] = sc.nextInt();
    				}
    				stus[i].calculateGrade();// 数据输入完就统计总分
    			}
    			// 先给学生排序,降序排列
    			for (int i = 0; i < stus.length - 1; i++) {
    				for (int j = i + 1; j < stus.length; j++) {
    					boolean boo = false;
    					if (stus[i].grade < stus[j].grade) {// 第i个元素是最小的
    						boo = true;
    					} else if (stus[i].grade == stus[j].grade) {// 小范围调整,升序排列
    						if ((stus[i].id).compareToIgnoreCase(stus[j].id) > 0) {// 大于
    							boo = true;
    						}
    					}
    					if (boo) {// 改动指针
    						Student s = null;// 没有必要开空间
    						s = stus[i];
    						stus[i] = stus[j];
    						stus[j] = s;
    					}
    				}
    			}
    			// 推断处理数据
    			for (int i = 0; i < stus.length; i++) {
    				if (stus[i].grade >= g) {
    					count++;
    					stus[i].isQualify = true;
    				}
    			}
    			// 输出
    			System.out.println(count);
    			for (int i = 0; i < stus.length; i++) {
    				if (stus[i].isQualify) {
    					System.out.println(stus[i]);
    				}
    			}
    		}
    	}
    
    	static class Student {
    		String id;// 学号
    		int questions;// 已做题目数量
    		int[] mat;
    		int grade;// 为节约内存
    		boolean isQualify = false;// 默认是没有合格
    
    		public void calculateGrade() {// 计算总分数
    			grade = 0;// 不浪费内存
    			for (int i = 0; i < mat.length; i++) {
    				grade += array[mat[i] - 1];
    			}
    		}
    
    		public String toString() {
    			return id + " " + grade;
    		}
    
    	}
    
    }
    




    排名

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 18107    Accepted Submission(s): 6600


    Problem Description
    今天的上机考试尽管有实时的Ranklist,但上面的排名仅仅是依据完毕的题数排序,没有考虑
    每题的分值。所以并非最后的排名。

    给定录取分数线。请你敲代码找出最后通过分数线的
    考生。并将他们的成绩按降序打印。

     

    Input
    測试输入包括若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N
    < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;下面N行。每行给出一
    名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号
    (题目号由1到M)。
    当读入的考生人数为0时,输入结束,该场考试不予处理。
     

    Output
    对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高
    到低输出上线考生的考号与分数。其间用1空格分隔。若有多名考生分数同样。则按他们考
    号的升序输出。
     

    Sample Input
    4 5 25 10 10 12 13 15 CS004 3 5 1 3 CS003 5 2 4 1 3 5 CS002 2 1 2 CS001 3 2 3 5 1 2 40 10 30 CS001 1 2 2 3 20 10 10 10 CS000000000000000001 0 CS000000000000000002 2 1 2 0
     

    Sample Output
    3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20
    Hint
    Huge input, scanf is recommended.



  • 相关阅读:
    排序算法之——冒泡排序优化
    Linux程序在预处理、编译、汇编、链接、运行步骤的作用
    理解可变参数的原理
    对虚函数、虚表的认识
    成员函数的重载、覆盖、隐藏
    centOS7-mariadb的安装
    centOS7-本地源配置
    vmware中桥接、NET、仅主机模式详解
    XXX系统项目目标文档课堂讨论
    做生活的有心人——xxx系统第一阶段总结
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6774953.html
Copyright © 2011-2022 走看看