C. Omkar and Determination
分析:
-
前缀和 + + + 堵路模型(自己瞎编的)
-
对于 ( x , y ) (x,y) (x,y) 若上面和左边都被挡了,那么当前列就不能可测,用 s u m [ y ] sum[y] sum[y] 标记一下
-
然后,题目要查询区间 [ y 1 , y 2 ] [y_1,y_2] [y1,y2] 的子网格是否可测,只需判断一下这段区间的 列 是否出现过不可测的情况即可
即 s u m sum sum 跑一遍前缀和,再判断一下是否 s u m [ y 2 ] = s u m [ y 1 ] sum[y_2]=sum[y_1] sum[y2]=sum[y1]
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int sum[N];
signed main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,m;
cin>>n>>m;
char s[n+2][m+2];
for(int i=1;i<=n;i++) cin>>s[i]+1;
for(int i=2;i<=n;i++)
{
for(int j=2;j<=m;j++) //行列都要从第二个开始
{
if(s[i][j-1]=='X' && s[i-1][j]=='X') sum[j]++;
}
}
for(int j=2;j<=m;j++) sum[j]+=sum[j-1];
int q;
cin>>q;
while(q--)
{
int l,r;
cin>>l>>r;
if(sum[l]==sum[r]) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}