题库重整

描述

 

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();
	}
}

  

posted @ 2016-10-14 00:20  lzyer  阅读(304)  评论(0编辑  收藏  举报