https://codeforces.com/problemset/problem/1583/C
这道题真的很妙
考虑一定不会满足的情况,下面的情况右下角一定不满足,因为他可以是.
也可以是X
,这种情况不能确定
?X
X?
我们用cnt[i]
统计第i-1
列情况下 第i
列的不能确定方格的个数
然后对cnt
做一下前缀和,对于每一次l,r
询问
如果
c
n
t
[
r
]
=
=
c
n
t
[
l
]
cnt[r] == cnt[l]
cnt[r]==cnt[l]说明在
[
l
,
r
]
[l,r]
[l,r]之间没有新增的不能猜测的点,所以可以得到原图
否则就不可以得到原图
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int N = 1e5 + 5;
void solve()
{
int n, m;
cin >> n >> m;
vector<string> s(n + 1);
for(int i = 1; i <= n; i++)
cin >> s[i];
vector<int> cnt(m + 1, 0);
for(int i = 2; i <= n; i++)
for(int j = 2; j <= m; j++)
{
if(s[i][j - 2] == 'X' && s[i - 1][j - 1] == 'X')
cnt[j] ++;
}
for(int i = 1; i <= m; i++)
cnt[i] += cnt[i - 1];
int q;
cin >> q;
while(q--)
{
int l, r;
cin >> l >> r;
if(cnt[r] == cnt[l]) cout << "YES\n";
else cout << "NO\n";
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
// cin >> t;
t = 1;
while(t--) solve();
return 0;
}