const int N=1e6;
int n,m,vis[N+10],ph[N+10],q;
char ch[N+10];
int bh(int x,int y) {
return (x-1)*m+y;
}
int main() {
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) {
char C=getchar();
while(C!='.'&&C!='X') C=getchar();
ch[bh(i,j)]=C;
}
for(int i=2;i<=n;i++)
for(int j=2;j<=m;j++)
if(ch[bh(i,j)]!='X'&&ch[bh(i-1,j)]=='X'&&ch[bh(i,j-1)]=='X')
vis[bh(i,j)]=1;
for(int j=2;j<=m;j++)
for(int i=2;i<=n;i++)
if(vis[bh(i,j)]) ph[j]=1;
for(int i=1;i<=m;i++) ph[i]+=ph[i-1];
q=read();
while(q--) {
int x=read(),y=read();
int zz=ph[y]-ph[x];
if(zz) pc('N'),pc('O'),enter;
else pc('Y'),pc('E'),pc('S'),enter;
}
return WDNMD;
}
这个做法会 WA On Test 3,求助。
大致思路是对于每个点只判断他上面和左面是否是 X
。
所以咋挂了