题库重整
描述
TOJ由于在早期没有题目搜索功能,导致系统内出现了很多重复的题目,为了检查题目重复情况,crq需要统计出系统内哪些题目是重复的,现在就把这个任务交给你了。
输入
输入数据有多组,每组数据的第1行是题库总量t,t<=10000。接下来有t行,每行有两个数据,分别为题号(题号在1001至11000之间)和标题(标题是一个字符串,可能包含空格)。
为简化问题,假设标题长度不超过20个字符,行末没有空格。
输入以EOF结束。
输出
请根据标题的字典序输出所有有重复的题目信息,每个信息占一行。
每行包括一个标题以及所有重复的题号,并按照题号的顺序从小到大排列。之间用空格分开。
样例输入
5
1001 a+b
1003 humble number
1002 humble number
1004 hello world
1005 a+b
样例输出
a+b 1001 1005
humble number 1002 1003
题解:map+list,采用java
code:
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.TreeMap; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { int n = cin.nextInt(); Map<String,List<Integer>> result = new TreeMap<String, List<Integer>>(); for(int i=0; i<n; i++) { int x = cin.nextInt(); String b = cin.nextLine(); b = b.trim(); if(result.containsKey(b)){ result.get(b).add(x); }else{ List<Integer> list = new ArrayList<Integer>(); list.add(x); result.put(b, list); } } for(Map.Entry<String, List<Integer>> mp: result.entrySet()) { List<Integer> list = mp.getValue(); if(list.size()>1) { Collections.sort(list); System.out.print(mp.getKey()); for(Integer i : list) { System.out.print(" "+i); } System.out.println(); } } } cin.close(); } }