Submission #1129182

#TimeUsernameProblemLanguageResultExecution timeMemory
1129182Username_taken12Furniture (JOI20_furniture)Java
100 / 100
647 ms157436 KiB

import java.io.*;
import java.util.StringTokenizer;

public class furniture {
	public static void main(String[] args) throws IOException {
		BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter pw = new PrintWriter(System.out);

		StringTokenizer st = new StringTokenizer(r.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		boolean[][] grid = new boolean[N][M];
		int[] dia = new int[N+M-1];
		for(int i=0; i<N; i++)
			dia[i]=Math.min(i+1, M);
		for(int i=M+N-2; i>=N; i--)
			dia[i]=Math.min(M+N-1-i, N);


		for(int i=0; i<N; i++){
			st=new StringTokenizer(r.readLine());
			for(int j=0; j<M; j++){
				if(Integer.parseInt(st.nextToken())==1)
					update(i,j, grid, dia);
			}
		}

		int Q = Integer.parseInt(r.readLine());
		for(int i=0; i<Q; i++)
		{
			st = new StringTokenizer(r.readLine());
			int x=Integer.parseInt(st.nextToken())-1;
			int y = Integer.parseInt(st.nextToken())-1;
			pw.println(((update(x,y,grid,dia)) ? '1' : '0'));
		}

		pw.close();
	}

	static boolean update(int i,int j,boolean[][] grid,int[] dia){
		if(i<0||i>=grid.length||j<0||j>=grid[0].length)
			return false;
		if(grid[i][j])
			return true;
		int d=i+j;
		if(dia[d]==1)
			return false;
		dia[d]--;
		grid[i][j]=true;
		if(check(i-1,j+1, grid)){
			update(i,j+1, grid, dia);
			update(i-1, j,grid, dia);
		}

		if(check(i+1, j-1,grid)){
			update(i, j-1, grid, dia);
			update(i+1, j, grid, dia);
		}

		return true;
	}

	static boolean check(int i,int j,boolean[][] grid){
		if(i<0||i>=grid.length||j<0||j>=grid[0].length)
			return true;
		return grid[i][j];
	}
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...