■0122 Summer of Phyonkichi
適当にDFSをやって最後のスプリンクラーまでたどり着いたら"OK".
import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; int x, y; int n; int[] xs, ys; // カエルのジャンプ範囲 int[] dx={-1, 0, 1, -1, 0, 1, -2, -2, -2, 2, 2, 2}; int[] dy={-2, -2, -2, 2, 2, 2, -1, 0, 1, -1, 0, 1}; void run(){ for(;;){ x=sc.nextInt(); y=sc.nextInt(); if((x|y)==0){ break; } n=sc.nextInt(); xs=new int[n]; ys=new int[n]; for(int i=0; i<n; i++){ xs[i]=sc.nextInt(); ys[i]=sc.nextInt(); } solve(); } } void solve(){ for(int i=0; i<dx.length; i++){ if(dfs(x+dx[i], y+dy[i], 0)){ println("OK"); return; } } println("NA"); } // (x,y)にてk番目のスプリンクラーに突撃 boolean dfs(int x, int y, int k){ if(k==n){ return true; } if(x<0||x>=10||y<0||y>=10){ return false; } if(x<xs[k]-1||x>xs[k]+1||y<ys[k]-1||y>ys[k]+1){ return false; } for(int i=0; i<dx.length; i++){ if(dfs(x+dx[i], y+dy[i], k+1)){ return true; } } return false; } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
0 件のコメント:
コメントを投稿