HDOJ(HDU) 2115 I Love This Game(排序排序、、、)

Problem Description
Do you like playing basketball ? If you are , you may know the NBA Skills Challenge . It is the content of the basketball skills . It include several parts , such as passing , shooting , and so on. After completion of the content , the player who takes the shortest time will be the winner . Now give you their names and the time of finishing the competition , your task is to give out the rank of them ; please output their name and the rank, if they have the same time , the rank of them will be the same ,but you should output their names in lexicographic order.You may assume the names of the players are unique.

Is it a very simple problem for you? Please accept it in ten minutes.

Input
This problem contains multiple test cases! Ease test case contain a n(1<=n<=10) shows the number of players,then n lines will be given. Each line will contain the name of player and the time(mm:ss) of their finish.The end of the input will be indicated by an integer value of zero.

Output
The output format is shown as sample below.
Please output the rank of all players, the output format is shown as sample below;
Output a blank line between two cases.

Sample Input
10
Iverson 17:19
Bryant 07:03
Nash 09:33
Wade 07:03
Davies 11:13
Carter 14:28
Jordan 29:34
James 20:48
Parker 24:49
Kidd 26:46
0

Sample Output
Case #1
Bryant 1
Wade 1
Nash 3
Davies 4
Carter 5
Iverson 6
James 7
Parker 8
Kidd 9
Jordan 10

题目大意就是按照后面的时间排名,所用时间小的排前面,如果时间相等,按照名字的字典序排序。不会出现相同的名字。

用sort方法给它们排序好,再输出就行,注意,这里的难点是输出的时候,
排名相同的人,他们的名次必须另外用一个数来标志。

还有,输出的时候,2个输出之间有空行。

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t =0;
        while(sc.hasNext()){
            int n =sc.nextInt();
            if(n==0){
                break;
            }
            if(t!=0){
                System.out.println();
            }
            Stu stu[] = new Stu[n];
            for(int i=0;i<n;i++){
                stu[i] = new Stu();
                stu[i].name=sc.next();
                String str = sc.next();
                String strs[] = str.split(":");
                stu[i].h=Integer.parseInt(strs[0]);
                stu[i].m=Integer.parseInt(strs[1]);
                stu[i].d=i;//必须赋值不同的值
            }
            Arrays.sort(stu, new Comparator<Stu>() {
                @Override
                public int compare(Stu o1, Stu o2) {
                    if(o1.h>o2.h){
                        return 1;
                    }
                    if(o1.h<o2.h){
                        return -1;
                    }
                    if(o1.m>o2.m){
                        return 1;
                    }
                    if(o1.m<o2.m){
                        return -1;
                    }
                    //-1用来标识这个2个人的时间相等
                    o1.d=-1;
                    o2.d=-1;
                    return o1.name.toUpperCase().compareTo(o2.name.toUpperCase());
                }
            });

            System.out.println("Case #"+(++t));
            int h=1;//h是从1-n依次加一的数
            int k=1;//如果有重复排名时的排名
            int eq =1;//用来标识有几个重复的
            for(int i=0;i<n;i++){
                k=h-eq;//重复的时间有几次,就用h减去它,就是排名
                if(i==0){
                    System.out.println(stu[i].name+" "+(h++));
                }else{
                    if(stu[i].d==stu[i-1].d){//这个2个人的时间相等
                        eq++;
                        System.out.println(stu[i].name+" "+k);
                        h++;
                    }else{
                        eq=1;
                        System.out.println(stu[i].name+" "+(h++));
                    }
                }
            }
        }
    }
}

class Stu{
    String name;
    int h;
    int m;
    int d;
}

时间: 2024-10-25 11:13:02

HDOJ(HDU) 2115 I Love This Game(排序排序、、、)的相关文章

HDOJ(HDU) 2109 Fighting for HDU(简单排序比较)

Problem Description 在上一回,我们让你猜测海东集团用地的形状,你猜对了吗?不管结果如何,都没关系,下面我继续向大家讲解海东集团的发展情况: 在最初的两年里,HDU发展非常迅速,综合各种ACM算法生成的老鼠药效果奇好,据说该药专对老鼠有效,如果被人误食了,没有任何副作用,甚至有传闻说还有健胃的效果,不过这倒没有得到临床验证.所以,公司的销量逐年递增,利润也是节节攀升,作为股东之一的公主负责财务,最近半年,她实在辛苦,多次因为点钞票造成双手抽筋而住院,现在在她面前你根本不要提到"

HDOJ/HDU 2555 人人都能参加第30届校田径运动会了(判断加排序~)

Problem Description 杭州师范大学第29届田径运动会圆满的闭幕了,本届运动会是我校规模最大,参赛人数最多的一次运动会.在两天半时间里,由学生.教工组成的61支代表队共2664名运动员参加了比赛.比赛期间,运动健儿赛出了风格.赛出了水平,共有9人次打破6项校纪录. 我们寝室的4名同学是我班最卖力的啦啦队员,每天都在看台上为班级里的运动员们加油助威,为我班获得精神文明奖立下了汗马功劳.可是遗憾的是,与我校的其他近2万名同学一样,我们自己不能上场表演 :( 于是,我们4名同学为下一届

HDOJ/HDU 1029 Ignatius and the Princess IV(简单DP,排序)

此题无法用JavaAC,不相信的可以去HD1029题试下! Problem Description "OK, you are not too bad, em- But you can never pass the next test." feng5166 says. "I will tell you an odd number N, and then N integers. There will be a special integer among them, you hav

HDOJ/HDU 2550 百步穿杨(注意排序)

Problem Description 时维九月,序属三秋,辽军大举进攻MCA山,战场上两军正交锋.辽军统帅是名噪一时的耶律-James,而MCA方则是派出了传统武将中草药123.双方经过协商,约定在十一月八日正午十分进行射箭对攻战.中草药123早早就开始准备,但是他是武将而不是铁匠,造弓箭的活就交给聪明能干的你了,现在告诉你每种弓箭规格,即箭身的长度,以及每种规格弓箭所需要的数目,要求你把需要的弓箭都输出. 弓箭的基本样子为 ">+-+>",其中"+-+&quo

HDOJ(HDU) 2523 SORT AGAIN(推导排序、、)

Problem Description 给你N个整数,x1,x2-xn,任取两个整数组合得到|xi-xj|,(0 < i,j<=N,i!=j). 现在请你计算第K大的组合数是哪个(一个组合数为第K大是指有K-1个不同的组合数小于它). Input 输入数据首先包含一个正整数C,表示包含C组测试用例. 每组测试数据的第一行包含两个整数N,K.(1< N<=1000,0< K<=2000) 接下去一行包含N个整数,代表x1,x2..xn.(0<=xi<=2000

HDOJ(HDU) 1862 EXCEL排序(类对象的快排)

Problem Description Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能. Input 测试输入包含若干测试用例.每个测试用例的第1行包含两个整数 N (<=100000) 和 C,其中 N 是纪录的条数,C 是指定排序的列号.以下有 N 行,每行包含一条学生纪录.每条学生纪录由学号(6位数字,同组测试中没有重复的学号).姓名(不超过8位且不包含空格的字符串).成绩(闭区间[0, 100]内的整数)组成,每个项目间用1个空格隔开.当读到 N=0 时,全部输入结

HDOJ/HDU 2535 Vote(排序、)

Problem Description 美国大选是按各州的投票结果来确定最终的结果的,如果得到超过一半的州的支持就可以当选,而每个州的投票结果又是由该州选民投票产生的,如果某个州超过一半的选民支持希拉里,则她将赢得该州的支持.现在给出每个州的选民人数,请问希拉里至少需要赢得多少选民的支持才能当选? Input 多组输入数据 每组数据的第一行包括一个整数N(1<=N<=101),表示美国的州数,N=0表示输入结束 接下来一行包括N个正整数,分别表示每个州的选民数,每个州的选民数不超过100 Ou

HDOJ(HDU) 2093 考试排名(Arrays.sort排序、类的应用)

Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错误,不管怎样错法,总是给你记上一笔,表明你曾经有过一次错误提交,因而当你一旦提交该题"AC"后,就要与你算一算帐了,总共该题错误提交了几回.虽然你在题数上,大步地跃上了一个台阶,但是在耗时上要摊上你共花去的时间.特别是,曾经有过的错误提交,每次都要摊上一定的单位时间分.这样一来,你在做出的

hdu 2115 I Love This Game

http://acm.hdu.edu.cn/showproblem.php?pid=2115 注意两点: 1:输出格式: 2:结构体排序 #include <iostream> #include <algorithm> #include <cstring> using namespace std; struct sa { char name[55]; int a; int b; int num; char ch; }data[15]; int cmp(sa x,sa y