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夏合宿の過去問でした。それではまたー