生日相同
-
时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
- 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生月日。试找出所有生日相同的学生。 输入
-
第一行为整数n,表示有n个学生,n<100。
此后每行包含一个字符串和两个整数,分别表示学生的学号(字符串长度小于10)和出生月(1<=m<=12)日(1<=d<=31)。
学号、月、日之间用一个空格分隔。
输出
-
对每组生日相同的学生,输出一行,
其中前两个数字表示月和日,后面跟着所有在当天出生的学生的学号,数字、学号之间都用一个空格分隔。
对所有的输出,要求按日期从前到后的顺序输出。
对生日相同的学号,按输入的顺序输出。
样例输入
-
5 00508192 3 2 00508153 4 5 00508172 3 2 00508023 4 5 00509122 4 5
样例输出
-
3 2 00508192 00508172 4 5 00508153 00508023 00509122
import java.util.Scanner; import java.util.Set; import java.util.TreeMap; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); TreeMap<String,String> hm=new TreeMap<String,String>(); for(int i=0;i<n;i++){ String sno=sc.next(); int m=sc.nextInt(),d=sc.nextInt(); String key=f(m,d); String value=hm.get(key); if(value==null){ hm.put(key,sno); } else{ hm.put(key, value+" "+sno); } } Set<String> s=hm.keySet(); for(String t:s){ String v=hm.get(t); if(v.indexOf(" ")!=-1){ System.out.println(g(t)+" "+v); } } } static String f(int month,int day){ String m=month+""; String d=day+""; if(month<10) m="0"+m; if(day<10) d="0"+d; return m+" "+d; } static String g(String md){ String[] t=md.split(" "); return Integer.parseInt(t[0])+" "+Integer.parseInt(t[1]); } }