# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
421058 | 2021-06-08T16:58:35 Z | inwbear | Furniture (JOI20_furniture) | C++14 | 5 ms | 1100 KB |
#include<bits/stdc++.h> using namespace std; #define pb push_back #define all(x) (x).begin(),(x).end() #define MEM(x,a) memset((x),a,sizeof((x))) #define F first #define S second #define imx INT_MAX const long long MOD = (long long)(1e9+7); const long long MMX = (long long)(1e18); typedef long long LL; typedef pair<int,int> pii; int n,m,q,xi,xj,co[1005][1005][2],k,fur[1005][1005],mi; bool cc; queue<pair<int,int> >qq; int main() { scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&fur[i][j]); } } co[1][1][0]=1; co[n][m][1]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(fur[i][j]==1||co[i][j][0]==0)continue; if(fur[i+1][j]==0)co[i+1][j][0]++; if(fur[i][j+1]==0)co[i][j+1][0]++; } } for(int i=n;i>0;i--) { for(int j=m;j>0;j--) { if(fur[i][j]==1||co[i][j][1]==0)continue; if(fur[i-1][j]==0)co[i-1][j][1]++; if(fur[i][j-1]==0)co[i][j-1][1]++; } } scanf("%d",&q); while(q--) { cc=false; scanf("%d %d",&xi,&xj); mi=1; for(int i=xi-1;i>0;i--) { if(fur[i][xj]==1)mi=0; if(co[i][xj][0]>0&&co[i][xj][1]-mi>0)cc=true; } for(int j=xj-1;j>0;j--) { if(fur[xi][j]==1)mi=0; if(co[xi][j][0]>0&&co[xi][j][1]-mi>0)cc=true; } for(int i=xi+1;i<=n;i++) { if(fur[i][xj]==1)mi=0; if(co[i][xj][0]>0&&co[i][xj][1]-mi>0)cc=true; } for(int j=xj+1;j<=m;j++) { if(fur[xi][j]==1)mi=0; if(co[xi][j][0]>0&&co[xi][j][1]-mi>0)cc=true; } if(cc) { printf("1\n"); qq.push({xi,xj}); while(!qq.empty()) { if(qq.front().F+1<=n) { co[qq.front().F+1][qq.front().S][0]--; if(co[qq.front().F+1][qq.front().S][0]==0) { qq.push({qq.front().F+1,qq.front().S}); } } if(qq.front().S+1<=m) { co[qq.front().F][qq.front().S+1][0]--; if(co[qq.front().F][qq.front().S+1][0]==0) { qq.push({qq.front().F,qq.front().S+1}); } } qq.pop(); } qq.push({xi,xj}); while(!qq.empty()) { if(qq.front().F-1>0) { co[qq.front().F-1][qq.front().S][1]--; if(co[qq.front().F-1][qq.front().S][1]==0) { qq.push({qq.front().F-1,qq.front().S}); } } if(qq.front().S-1>0) { co[qq.front().F][qq.front().S-1][1]--; if(co[qq.front().F][qq.front().S-1][1]==0) { qq.push({qq.front().F,qq.front().S-1}); } } qq.pop(); } } else printf("0\n"); } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 844 KB | Output is correct |
2 | Incorrect | 5 ms | 1100 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 844 KB | Output is correct |
2 | Incorrect | 5 ms | 1100 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |