CodeForces - 519B(java中map的entrySet用法)

entrySet 对map进行遍历速度比较快

		HashMap<Integer,Integer> map =new HashMap<Integer,Integer>();
        Iterator<Map.Entry<Integer, Integer>> it=map.entrySet().iterator();
	
		  while(it.hasNext())
		  {
			 Map.Entry<Integer, Integer>  en = it.next();
			  Integer maKey = en.getKey();
			  Integer maValue = en.getValue();
			 }

A和B正在准备即将到来的信息学全国联赛。

 

B非常喜欢写程序。写完程序以后,他必须先编译代码。

 

最初,编译器显示有Ñ个编译错误,其中每一个被表示为一个正整数。经过一番努力,B设法解决一个错误,然后又编译了下,又改正了一个错误。

 

B可以完全肯定,他纠正了两个错误,但他忘记了是哪几个编译错误消失了。 

 

你能帮助B来找出那两个已经被改正的错误么?

Input

输入的第一行包含整数n(3≤n≤10^ 5) - 表示编译错误的初始数量。

 

第二行包含n个空格分隔的整数a1,a2,...,an(1≤ai≤10^9),表示第一次编译的时候出现的n个编译错误的序号。

 

第三行包含n-1个空格分开的整数b1,b2,......,bn-1,表示改正了一个错误以后,第二次编译中显示的错误。保证第三行中的所有数字都是第二行中的所有数字,除了一个被改正了的错误。

 

第四行有n-2空格分开的整数c1, c2,..., cn-2,表示在又改正了一个错误之后,第三次编译显示的错误。保证在第四行的所有数字都是来自第三行的,除了被改正的那个错误。

Output

输出只有两行,第一行输出一个整数,表示第一次被改正的错误的序号,第二行也输出一个整数,表示第二次被改正的错误的序号。题目保证输入数据都是正确的。

Sample Input

输入样例1:

5

1 5 8 123 7

123 7 5 1

5 1 7

 

输入样例2:

6

1 4 3 3 5 7

3 7 5 4 3

4 3 7 5

Sample Output

输出样例1:

8

123

 

输出样例2:

1

3

Hint

注意如果有相同序号的编译错误同时出现,B选手每次最多只能修改一个错误。

//package javasetmapvector1;
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		//int[] a=new int[n];
		//int[] b=new int[n];
		HashMap<Integer,Integer> map1 =new HashMap<Integer,Integer>();
		HashMap<Integer,Integer> map2 =new HashMap<Integer,Integer>();
		HashMap<Integer,Integer> map3 =new HashMap<Integer,Integer>();
		for(int i=0;i<n;i++)
		{
			//a[i]=sc.nextInt();
			int x=sc.nextInt();
	           Integer k=map1.get(x);
	           if(k==null)
	           {
	        	   map1.put(x,1);
	           }
	           else
	           {
	        	   map1.put(x, k+1);
	           }
			
		}
		for(int i=0;i<n-1;i++)
		{
		    //b[i]=sc.nextInt();
		    int x=sc.nextInt();
	           Integer k=map2.get(x);
	           if(k==null)
	           {
	        	   map2.put(x,1);
	           }
	           else
	           {
	        	   map2.put(x, k+1);
	           }
			
		}
		for(int i=0;i<n-2;i++)
		{
			 int x=sc.nextInt();
	           Integer k=map3.get(x);
	           if(k==null)
	           {
	        	   map3.put(x,1);
	           }
	           else
	           {
	        	   map3.put(x, k+1);
	           }
			
		}
		int sum1=0,sum2=0;

		Iterator<Map.Entry<Integer, Integer>> it=map2.entrySet().iterator();
		
		  while(it.hasNext())
		  {
			 Map.Entry<Integer, Integer>  en = it.next();
			  Integer maKey = en.getKey();
			  Integer maValue = en.getValue();
			 Integer k= map3.get(maKey);
			 if(k==null||k<maValue)
			 {
				 sum2=maKey;
				 break;
			 }
			  
		  }
		  
		  Iterator<Map.Entry<Integer, Integer>> it1=map1.entrySet().iterator();
		  while(it1.hasNext())
		  {
			  Map.Entry<Integer,Integer> en=it1.next();
			  Integer key=en.getKey();
			  Integer value=en.getValue();
			  Integer k=map2.get(key);
			  if(k==null||k<value)
			  {
				  sum1=key;
				  break;
			  }
		  }
		  System.out.println(sum1);
		  System.out.println(sum2);
		 
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值