Judging Troubles: Difference between revisions

From programming_contest
Jump to navigation Jump to search
imported>Kmk21
Created page with "= Introduction = This problem asks you to compare two lists and return the number of common entries = Solutions= == HashMap == === Idea === Create a hashmap of strings to nu..."
 
imported>Kmk21
No edit summary
Line 49: Line 49:
[[Category:nwerc2014]]
[[Category:nwerc2014]]
[[Category:ICPC Problems]]
[[Category:ICPC Problems]]
[[Category:Hashmap]]
[[Category:Algorithm Easy]]
[[Category:Algorithm Easy]]
[[Category:Implementation Easy]]
[[Category:Implementation Easy]]

Revision as of 22:31, 31 January 2015

Introduction

This problem asks you to compare two lists and return the number of common entries

Solutions

HashMap

Idea

Create a hashmap of strings to number of appearances of that string. Read through the first list, incrementing the count for each string found. Scan through the second list. For each string in the map with a positive count, add 1 to the total match count, and subtract 1 from the value in the hashmap.

Runtime

  • n

Code

Solution - Java

import java.util.*;
public class j {
	Scanner in=new Scanner(System.in);
	public static void main(String[] args) {
		new j().go();
	}
	private void go() {
		int n=in.nextInt();
		HashMap<String,Integer> dom=new HashMap<String,Integer>();
		HashMap<String, Integer> kat=new HashMap<String,Integer>();
		for(int i=0;i<n;i++){
			String s=in.next();
			if(!dom.containsKey(s))dom.put(s, 0);
			dom.put(s, dom.get(s)+1);
		}
		for(int i=0;i<n;i++){
			String s=in.next();
			if(!kat.containsKey(s))kat.put(s, 0);
			kat.put(s, kat.get(s)+1);
		}
		int ans=0;
		for(String s:dom.keySet())if(kat.containsKey(s))ans+=Math.min(dom.get(s), kat.get(s));
				System.out.println(ans);
	}
}

Sorting

Idea

Sort the two lists. Start at the head of each list. If the two match, increment the total match count. If they don't, increment the index of the list with the word that appears first alphabetically.

Runtime

n*log(n)