Submission #5349487


Source Code Expand

Copy
import java.io.IOException;
import java.io.InputStream;
import java.util.*;


public class Main {
	
    public static void main(String[] args) {
    	FastScanner sc = new FastScanner();
    	
    	int h = sc.nextInt();
    	int w = sc.nextInt();
    	
    	int si = -1;
    	int sj = -1;
    	int gi = -1;
    	int gj = -1;
    	
    	IntGrid g = new IntGrid(h,w);
    	
    	for(int i=0;i<h;i++){
    		char[] c = sc.next().toCharArray();
    		
    		for(int j=0;j<w;j++){
    			
    			switch(c[j]){
    			case 's':
    				g.grid[i][j] = 2;
    				si = i;
    				sj = j;
    				break;
    			case 'g':
    				g.grid[i][j] = 2;
    				gi = i;
    				gj = j;
    				break;
    			case '#':
    				g.grid[i][j] = 1;
    				break;
    			case '.':
    				g.grid[i][j] = 2;
    				break;
    			default:	
    			}
    			
    		}
    	}
    	
    	boolean[][] visited = new boolean[h][w];
    	ArrayDeque<Pair> q = new ArrayDeque<>();
    	boolean can = false;
    	
    	visited[si][sj] = true;
    	q.add(new Pair(si,sj));
    	
    	loop:while(!q.isEmpty()){
    		Pair now = q.pollFirst();
    		
    		for(Pair p: g.nextSet(now.a, now.b)){
    			if(p.a == gi && p.b == gj){
    				can = true;
    				break loop;
    			}
    			else if(!visited[p.a][p.b] && g.grid[p.a][p.b] == 2){
    				q.offerFirst(new Pair(p.a,p.b));
    				visited[p.a][p.b] = true;
    			}
    		}
    		
    	}
    	
    	if(can){
    		System.out.println("Yes");
    	}
    	else{
    		System.out.println("No");
    	}
    }
    
}

class IntGrid {
	int[][] grid;
	
	public IntGrid(int h, int w){
		this.grid = new int[h][w];
	}
	
	//(n,m)に隣接するグリッドを全て返す
	java.util.LinkedList<Pair> nextSet(int n, int m){
		java.util.LinkedList<Pair> list = new java.util.LinkedList<>();
		
		if(n>0){
			list.add(new Pair(n-1,m));
		}
		
		if(n<this.grid.length-1){
			list.add(new Pair(n+1,m));
		}
		
		if(m>0){
			list.add(new Pair(n,m-1));
		}
		
		if(m<this.grid[0].length-1){
			list.add(new Pair(n,m+1));
		}
		
		return list;
	}
	
}

class Pair implements Comparable<Pair>{
	int a,b;
	
	public Pair(int a, int b){
		this.a = a;
		this.b = b;
	}
	
	@Override
	public boolean equals(Object o){
		if(o instanceof Pair){
			Pair p = (Pair) o;
			return a == p.a && b == p.b;
		}
		return super.equals(o);
	}
	
	@Override
	public int compareTo(Pair o){
		if(a!=o.a){
			return Integer.compare(a,o.a);
		}
		return Integer.compare(b, o.b);
	}
	
	@Override
	public int hashCode(){
		return (a<<16)+b;
	}
	
}


class FastScanner {
    private final InputStream in = System.in;
    private final byte[] buffer = new byte[1024];
    private int ptr = 0;
    private int buflen = 0;
    private boolean hasNextByte() {
        if (ptr < buflen) {
            return true;
        }else{
            ptr = 0;
            try {
                buflen = in.read(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (buflen <= 0) {
                return false;
            }
        }
        return true;
    }
    private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}
    private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}
    public boolean hasNext() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; return hasNextByte();}
    public String next() {
        if (!hasNext()) throw new NoSuchElementException();
        StringBuilder sb = new StringBuilder();
        int b = readByte();
        while(isPrintableChar(b)) {
            sb.appendCodePoint(b);
            b = readByte();
        }
        return sb.toString();
    }
    public long nextLong() {
        if (!hasNext()) throw new NoSuchElementException();
        long n = 0;
        boolean minus = false;
        int b = readByte();
        if (b == '-') {
            minus = true;
            b = readByte();
        }
        if (b < '0' || '9' < b) {
            throw new NumberFormatException();
        }
        while(true){
            if ('0' <= b && b <= '9') {
                n *= 10;
                n += b - '0';
            }else if(b == -1 || !isPrintableChar(b)){
                return minus ? -n : n;
            }else{
                throw new NumberFormatException();
            }
            b = readByte();
        }
    }
    public int nextInt() {
        long nl = nextLong();
        if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) throw new NumberFormatException();
        return (int) nl;
    }
    public double nextDouble() { return Double.parseDouble(next());}
}

Submission Info

Submission Time
Task A - 深さ優先探索
User warachia
Language Java8 (OpenJDK 1.8.0)
Score 100
Code Size 4817 Byte
Status
Exec Time 275 ms
Memory 63268 KB

Judge Result

Set Name Score / Max Score Test Cases
Sample 0 / 0 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 00_sample_05.txt
All 100 / 100 00_min_01.txt, 00_min_02.txt, 00_min_03.txt, 00_min_04.txt, 00_min_05.txt, 00_min_06.txt, 00_min_07.txt, 00_min_08.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 00_sample_05.txt, 01_rnd_00.txt, 01_rnd_01.txt, 01_rnd_02.txt, 01_rnd_03.txt, 01_rnd_04.txt, 01_rnd_05.txt, 01_rnd_06.txt, 01_rnd_07.txt, 01_rnd_08.txt, 01_rnd_09.txt, 01_rnd_10.txt, 01_rnd_11.txt, 01_rnd_12.txt, 01_rnd_13.txt, 01_rnd_14.txt, 01_rnd_15.txt, 01_rnd_16.txt, 01_rnd_17.txt, 01_rnd_18.txt, 01_rnd_19.txt, 02_rndhard_00.txt, 02_rndhard_01.txt, 02_rndhard_02.txt, 02_rndhard_03.txt, 02_rndhard_04.txt, 02_rndhard_05.txt, 02_rndhard_06.txt, 02_rndhard_07.txt, 02_rndhard_08.txt, 02_rndhard_09.txt, 02_rndhard_10.txt, 02_rndhard_11.txt, 02_rndhard_12.txt, 02_rndhard_13.txt, 02_rndhard_14.txt, 02_rndhard_15.txt, 02_rndhard_16.txt, 02_rndhard_17.txt, 02_rndhard_18.txt, 02_rndhard_19.txt, 02_rndhard_20.txt, 02_rndhard_21.txt, 02_rndhard_22.txt, 02_rndhard_23.txt, 02_rndhard_24.txt, 02_rndhard_25.txt, 02_rndhard_26.txt, 02_rndhard_27.txt, 02_rndhard_28.txt, 02_rndhard_29.txt, 02_rndhard_30.txt, 02_rndhard_31.txt, 02_rndhard_32.txt, 02_rndhard_33.txt, 02_rndhard_34.txt, 02_rndhard_35.txt, 02_rndhard_36.txt, 02_rndhard_37.txt, 02_rndhard_38.txt, 02_rndhard_39.txt, 03_rndhardsmall_00.txt, 03_rndhardsmall_01.txt, 03_rndhardsmall_02.txt, 03_rndhardsmall_03.txt, 03_rndhardsmall_04.txt, 03_rndhardsmall_05.txt, 03_rndhardsmall_06.txt, 03_rndhardsmall_07.txt, 03_rndhardsmall_08.txt, 03_rndhardsmall_09.txt
Case Name Status Exec Time Memory
00_min_01.txt 71 ms 18900 KB
00_min_02.txt 71 ms 20308 KB
00_min_03.txt 70 ms 20820 KB
00_min_04.txt 71 ms 20820 KB
00_min_05.txt 71 ms 19028 KB
00_min_06.txt 69 ms 18388 KB
00_min_07.txt 72 ms 24916 KB
00_min_08.txt 71 ms 22868 KB
00_sample_01.txt 71 ms 21328 KB
00_sample_02.txt 70 ms 19540 KB
00_sample_03.txt 70 ms 21460 KB
00_sample_04.txt 73 ms 20820 KB
00_sample_05.txt 69 ms 20820 KB
01_rnd_00.txt 106 ms 25684 KB
01_rnd_01.txt 275 ms 63268 KB
01_rnd_02.txt 161 ms 40472 KB
01_rnd_03.txt 135 ms 31652 KB
01_rnd_04.txt 216 ms 47008 KB
01_rnd_05.txt 104 ms 25812 KB
01_rnd_06.txt 113 ms 26324 KB
01_rnd_07.txt 249 ms 45968 KB
01_rnd_08.txt 112 ms 25812 KB
01_rnd_09.txt 110 ms 25428 KB
01_rnd_10.txt 210 ms 43820 KB
01_rnd_11.txt 111 ms 23252 KB
01_rnd_12.txt 161 ms 39320 KB
01_rnd_13.txt 186 ms 44948 KB
01_rnd_14.txt 111 ms 25940 KB
01_rnd_15.txt 145 ms 35104 KB
01_rnd_16.txt 145 ms 24916 KB
01_rnd_17.txt 225 ms 44268 KB
01_rnd_18.txt 108 ms 25812 KB
01_rnd_19.txt 234 ms 45424 KB
02_rndhard_00.txt 119 ms 26068 KB
02_rndhard_01.txt 104 ms 24916 KB
02_rndhard_02.txt 139 ms 34344 KB
02_rndhard_03.txt 133 ms 32724 KB
02_rndhard_04.txt 114 ms 25556 KB
02_rndhard_05.txt 121 ms 27644 KB
02_rndhard_06.txt 122 ms 24660 KB
02_rndhard_07.txt 114 ms 25556 KB
02_rndhard_08.txt 119 ms 23764 KB
02_rndhard_09.txt 111 ms 22996 KB
02_rndhard_10.txt 125 ms 25300 KB
02_rndhard_11.txt 121 ms 23636 KB
02_rndhard_12.txt 112 ms 24532 KB
02_rndhard_13.txt 129 ms 25428 KB
02_rndhard_14.txt 119 ms 23764 KB
02_rndhard_15.txt 118 ms 26068 KB
02_rndhard_16.txt 109 ms 26836 KB
02_rndhard_17.txt 123 ms 25940 KB
02_rndhard_18.txt 109 ms 25172 KB
02_rndhard_19.txt 108 ms 26188 KB
02_rndhard_20.txt 105 ms 23892 KB
02_rndhard_21.txt 109 ms 26704 KB
02_rndhard_22.txt 108 ms 26324 KB
02_rndhard_23.txt 114 ms 25684 KB
02_rndhard_24.txt 116 ms 25044 KB
02_rndhard_25.txt 122 ms 25428 KB
02_rndhard_26.txt 120 ms 24916 KB
02_rndhard_27.txt 109 ms 25812 KB
02_rndhard_28.txt 119 ms 25812 KB
02_rndhard_29.txt 117 ms 26576 KB
02_rndhard_30.txt 122 ms 25812 KB
02_rndhard_31.txt 111 ms 23380 KB
02_rndhard_32.txt 118 ms 26196 KB
02_rndhard_33.txt 115 ms 23764 KB
02_rndhard_34.txt 110 ms 24916 KB
02_rndhard_35.txt 113 ms 24148 KB
02_rndhard_36.txt 117 ms 24660 KB
02_rndhard_37.txt 116 ms 26068 KB
02_rndhard_38.txt 108 ms 26580 KB
02_rndhard_39.txt 107 ms 27044 KB
03_rndhardsmall_00.txt 70 ms 21460 KB
03_rndhardsmall_01.txt 71 ms 20820 KB
03_rndhardsmall_02.txt 79 ms 19540 KB
03_rndhardsmall_03.txt 71 ms 22868 KB
03_rndhardsmall_04.txt 70 ms 18644 KB
03_rndhardsmall_05.txt 70 ms 21332 KB
03_rndhardsmall_06.txt 71 ms 20052 KB
03_rndhardsmall_07.txt 70 ms 21332 KB
03_rndhardsmall_08.txt 71 ms 21204 KB
03_rndhardsmall_09.txt 70 ms 20436 KB