AOJ0242 Input Candidates

問題リンク Input Candidates

  • 解法

出現単語ごとに登場回数をカウントし、最後に登場回数、辞書式の順でソートすればOKです

  • ソース
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Scanner;

//Input Candidates
public class AOJ0242 {

	Map<String, Integer>[] ref;
	int f;
	
	@SuppressWarnings("unchecked")
	void run(){
		Scanner sc = new Scanner(System.in);
		for(;;){
			int n = sc.nextInt();
			if(n==0)break;
			sc.nextLine();
			ref = new Map[26];
			for(int i=0;i<26;i++)ref[i]=new HashMap<String, Integer>();
			while(n--!=0){
				for(String s:sc.nextLine().split(" ")){
					int x = s.charAt(0)-'a';
					if(ref[x].containsKey(s)){
						int z = ref[x].get(s)+1;
						ref[x].put(s, z);
					}
					else ref[x].put(s, 1);
				}
			}
			f = sc.next().charAt(0)-'a';
			PriorityQueue<String> q = new PriorityQueue<String>(5, new Comparator<String>() {
				public int compare(String o1, String o2) {
					return ref[f].get(o1)!=ref[f].get(o2)?ref[f].get(o2)-ref[f].get(o1):o1.compareTo(o2);
				}
			});
			for(String s:ref[f].keySet())q.add(s);
			if(q.isEmpty())System.out.println("NA");
			else {
				int t = Math.min(5, q.size());
				for(int i=0;i<t;i++)System.out.print(q.poll()+(i==t-1?"\n":" "));
			}
		}
	}
	
	public static void main(String[] args) {
		new AOJ0242().run();
	}
}