baru003のブログ

baruの雑記兼備忘録

AOJ 0061

・問題リンクRank Checker

・コメント
約1ヶ月ぶりのコーディングとなりました(笑)毎回毎回間が空いてしまって基本的な文法から確認しながら書くはめになり時間がかかってしまいました・・.
ソースもゴリ押しで・・.
はじめに、すべてのチームのランクを一位にしておきました.
そして重複しない正解数のリストを作って、各チームの正解数よりもリストの中に多い正解数があればその数だけランクをインクリメント、つまり順位を下げていくようにして実装しました.
構想自体はすぐに出来たのですが変な先入観で比較の仕方を間違えていてそれに気づけず多くの時間を使うはめに・・(泣)
もっと早く正確にコーディング出来るようになりたいです(切実).

・ソース

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class P0061 {

	static Scanner sc = new Scanner(System.in);
	static Map<Integer, Integer> team = new TreeMap<Integer, Integer>();
	static List<Integer> acceptList = new ArrayList<Integer>();
	static int[] number = new int[1000000];
	static int[] accept = new int[1000000];

	public static void solve() {
		int count = 0;
		while (true) {
			String line = sc.nextLine();
			String[] input = line.split(",");
			number[count] = Integer.parseInt(input[0]);
			accept[count] = Integer.parseInt(input[1]);
			if (number[count] == 0 && accept[count] == 0) {
				break;
			}
			if (acceptList.contains(accept[count]) == false) {
				acceptList.add(accept[count]);
			}
			count++;
		}
		for (int i = 0; i < count; i++) {
			int rank = 1;
			for (int j = 0; j < acceptList.size(); j++) {
				if (accept[i] < acceptList.get(j))
					rank++;
			}
			team.put(number[i], rank);
		}
		output(team);
	}

	public static void output(Map team) {
		while (sc.hasNext()) {
			int entryNumber = sc.nextInt();
			System.out.println(team.get(entryNumber));
		}
	}

	public static void main(String[] args) {
		solve();
	}

}