AOJ2440 Kagisys【競技プログラミング】

AOJ2440 Kagisys

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2440

ICカードを用いて鍵を開け閉めする電子錠システムのシミュレーションをする

解法

setを使って登録済みIDを覚えておいて、
あとはタッチされたIDがそのsetにあるかどうか判定すればok!

package aoj24;

import java.util.Scanner;
import java.util.TreeSet;

public class AOJ2440 {
    void run(){
        Scanner sc = new Scanner(System.in);
        TreeSet<String> registeredId = new TreeSet<String>();
        boolean opened = false;

        int n = sc.nextInt();
        for(int i=0; i<n; i++){
            registeredId.add(sc.next());
        }
        int m = sc.nextInt();
        for(int i=0; i<m; i++){
            String touchId = sc.next();
            if(registeredId.contains(touchId)){
                if(opened){
                    System.out.println("Closed by " + touchId);
                    opened = false;
                }
                else{
                    System.out.println("Opened by " + touchId);
                    opened = true;
                }
            }
            else{
                System.out.println("Unknown " + touchId);
            }
        }
    }
    public static void main(String[] args) {
        new AOJ2440().run();
        //new Main().run();
    }
}

javaだとこの手の問題はsetを使うと楽ですねー
個人的には競技プログラミングにおいて、
アルゴリズムと同等かそれ以上にデータ構造の選択・知識は重要だと思っております

ちなみに上記の問題は2012のJAG夏合宿の過去問でした。それではまたー