2000-Mysterious Gems
http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=2000&lang=jp
考え方
与えられる数値が対して大く無いので、シミュレートするだけで間に合う。
実装(Java)
import java.util.*; public class Main{ public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int N;Vector<Integer> x,y; for(;;){ N=scanner.nextInt(); if(N==0)break; x=new Vector<Integer>();y=new Vector<Integer>(); for(int i=0;i<N;i++){ x.add(scanner.nextInt()); y.add(scanner.nextInt()); } int rx=10,ry=10,M=scanner.nextInt(),mv,res=0;String in; for(int j=0;j<M;j++){ in=scanner.next();mv=scanner.nextInt(); int dx,dy; if(in.equals("N")){ dx=0;dy=1; }else if(in.equals("E")){ dx=1;dy=0; }else if(in.equals("W")){ dx=-1;dy=0; }else{ dx=0;dy=-1; } for(int k=0;k<mv;k++){ rx+=dx;ry+=dy; for(int i=0;i<N;i++){ if(x.get(i)==rx&&y.get(i)==ry){ res++; x.set(i,-100); y.set(i,-100); } } } } if(res==N){ System.out.println("Yes"); }else{ System.out.println("No"); } } } }