Problem:
取引

取引先の顧客番号と取引日を月ごとに記録したデータがあります。今月のデータと先月のデータを読み込んで、先月から２ヶ月連続で取引のある会社の顧客番号と取引のあった回数を出力するプログラムを作成してください。ただし、月々の取引先数は 1,000 社以内です。

Input

今月のデータと、先月のデータが１行の空行で区切られて与えられます。それぞれのデータは以下のような形式で与えられます。

c1,d1
c2,d2
...
...

ci (1 ≤ ci ≤ 1,000) は顧客番号を表す整数、 di (1 ≤ di ≤ 31) は取引日を表す整数です。

Output

２ヶ月連続で取引のある会社について、顧客番号が小さい順に顧客番号と取引回数の総数を空白で区切って出力します。

Sample Input

123,10
56,12
34,14

123,3
56,4
123,5

Output for the Sample Input

56 2
123 3

Solution in JAVA (judge verdict: Accepted)


import java.util.*;
import java.lang.*;
import java.math.*;

import javax.swing.RowFilter.Entry;

public class Main {
	Scanner sc = new Scanner(System.in);
	class log implements Comparable<log>{
		int key;
		int value;
		log(int key,int value){
			this.key = key;
			this.value = value;
		}
		@Override
		public int compareTo(log o) {
			return key-o.key;
		}		
	}
	
	void run(){
		HashMap<Integer, Integer> l = new HashMap<Integer, Integer>();
		HashMap<Integer, Integer> l2 = new HashMap<Integer, Integer>();
		for(;;){
			String buffer = sc.nextLine();
			if(buffer.length() == 0) break;
			int k = new Scanner(buffer.replace(',', ' ')).nextInt();
			if(l.containsKey(k)){
				l.put(k, l.get(k)+1);
			}else{
				l.put(k, 1);
			}
		}
		for(;sc.hasNextLine();){
			String buffer = sc.nextLine();
//			if(buffer.equals("ddd")) break;
			int k = new Scanner(buffer.replace(',', ' ')).nextInt();
			if(l2.containsKey(k)){
				l2.put(k, l2.get(k)+1);
			}else{
				l2.put(k, 1);
			}
		}
		LinkedList<log> l3 = new LinkedList<Main.log>();
		for(int i:l.keySet()){
			if(l2.containsKey(i)){
				l3.add(new log(i, l.get(i)+l2.get(i)));
			}
		}
		log[] arr = l3.toArray(new log[0]);
		Arrays.sort(arr);
		for(log ans:arr){
			System.out.println(ans.key + " " + ans.value);
		}
	}
	public static void main(String[] args){
		Main m = new Main();
		m.run();
		
	}
}