답안 #423928

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
423928 2021-06-11T14:12:46 Z DanerZein Furniture (JOI20_furniture) C++14
0 / 100
3 ms 4684 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
int ma[1010][1010];
int X[3]={0,1},XI[3]={0,-1};
int Y[3]={1,0},YI[3]={-1,0};
int n,m;
int vis[1010][1010];
int num[1000010];
void arriba(){
  vis[0][0]=1;
  for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
      if(vis[i][j]){
	for(int k=0;k<2;k++){
	  int xi,yi;
	  xi=i+X[k]; yi=j+Y[k];
	  if(xi<n && yi<m && !ma[xi][yi]) vis[xi][yi]=1;
	}
      }
}
void abajo(){
  vis[n-1][m-1]=2;
  for(int i=n-1;i>=0;i--)
    for(int j=m-1;j>=0;j--)
      if(vis[i][j]==2){
	for(int k=0;k<2;k++){
	  int xi,yi;
	  xi=i+XI[k]; yi=j+YI[k];
	  if(xi>=0 && yi>=0 && !ma[xi][yi] && vis[xi][yi]) vis[xi][yi]=2;
	}
      }
}
bool check(int a,int b){
  if(vis[a][b]<=1) return 1;
  if(num[a+b]>=2) {
    num[a+b]--;
    return 1;
  }
  else return 0;
}
int main(){
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);
  memset(vis,0,sizeof vis);
  cin>>n>>m;
  for(int i=0;i<n;i++) for(int j=0;j<m;j++)  cin>>ma[i][j];
  arriba();
  abajo();
  for(int i=0;i<n;i++){
    for(int j=0;j<m;j++){
      if(vis[i][j]==2) num[i+j]++;
    }
  }
  int q;
  cin>>q;
  for(int i=0;i<q;i++){
    int a,b;
    cin>>a>>b;
    a--; b--;
    if(check(a,b)){
      cout<<"1\n";
    }
    else cout<<"0\n";
  }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4556 KB Output is correct
2 Incorrect 3 ms 4684 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4556 KB Output is correct
2 Incorrect 3 ms 4684 KB Output isn't correct
3 Halted 0 ms 0 KB -