#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,cp[1005][1005][2];
bool cc;
queue<pair<int,int> >qq;
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
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);
for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cp[i][j][0]=0,cp[i][j][1]=0;
cp[1][1][0]=1;
cp[n][m][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(fur[i][j]==1||cp[i][j][0]==0)continue;
if(fur[i+1][j]==0)cp[i+1][j][0]++;
if(fur[i][j+1]==0)cp[i][j+1][0]++;
}
}
for(int i=n;i>0;i--)
{
for(int j=m;j>0;j--)
{
if(fur[i][j]==1||cp[i][j][1]==0)continue;
if(fur[i-1][j]==0)cp[i-1][j][1]++;
if(fur[i][j-1]==0)cp[i][j-1][1]++;
}
}
// printf("-------------------\n");
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=m;j++)
// {
// //if(co[i][j][0]!=cp[i][j][0])printf("%d %d\n",i,j);
// //if(co[i][j][1]!=cp[i][j][1])printf("%d %d\n",i,j);
// printf("[%d %d %d %d] ",co[i][j][0],cp[i][j][0],co[i][j][1],cp[i][j][1]);
// }
// printf("\n");
// }
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;
break;
}
}
mi=1;
if(!cc)
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;
break;
}
}
mi=1;
if(!cc)
for(int i=xi+1;i<=n;i++)
{
if(fur[i][xj]==1)mi=0;
if(co[i][xj][0]-mi>0&&co[i][xj][1]>0)
{
cc=true;
break;
}
}
mi=1;
if(!cc)
for(int j=xj+1;j<=m;j++)
{
if(fur[xi][j]==1)mi=0;
if(co[xi][j][0]-mi>0&&co[xi][j][1]>0)
{
cc=true;
break;
}
}
if(cc)
{
printf("1\n");
fur[xi][xj]=1;
if(co[xi][xj][0]>0)
{
co[xi][xj][0]=0;
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();
}
}
if(co[xi][xj][1]>0)
{
co[xi][xj][1]=0;
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
furniture.cpp: In function 'int main()':
furniture.cpp:20:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
20 | scanf("%d %d",&n,&m);
| ~~~~~^~~~~~~~~~~~~~~
furniture.cpp:25:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
25 | scanf("%d",&fur[i][j]);
| ~~~~~^~~~~~~~~~~~~~~~~
furniture.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
48 | scanf("%d",&q);
| ~~~~~^~~~~~~~~
furniture.cpp:52:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
52 | scanf("%d %d",&xi,&xj);
| ~~~~~^~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
1280 KB |
Output is correct |
2 |
Correct |
132 ms |
1564 KB |
Output is correct |
3 |
Correct |
319 ms |
1504 KB |
Output is correct |
4 |
Correct |
658 ms |
1572 KB |
Output is correct |
5 |
Correct |
720 ms |
1736 KB |
Output is correct |
6 |
Correct |
914 ms |
1732 KB |
Output is correct |
7 |
Correct |
620 ms |
1688 KB |
Output is correct |
8 |
Correct |
490 ms |
1612 KB |
Output is correct |
9 |
Correct |
514 ms |
1676 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
20 ms |
1280 KB |
Output is correct |
2 |
Correct |
132 ms |
1564 KB |
Output is correct |
3 |
Correct |
319 ms |
1504 KB |
Output is correct |
4 |
Correct |
658 ms |
1572 KB |
Output is correct |
5 |
Correct |
720 ms |
1736 KB |
Output is correct |
6 |
Correct |
914 ms |
1732 KB |
Output is correct |
7 |
Correct |
620 ms |
1688 KB |
Output is correct |
8 |
Correct |
490 ms |
1612 KB |
Output is correct |
9 |
Correct |
514 ms |
1676 KB |
Output is correct |
10 |
Execution timed out |
5037 ms |
1532 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |