描述
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();
}
}
原文:http://www.cnblogs.com/lzeffort/p/5958811.html