This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvl = vector<vll>;
using vb = vector<bool>;
using vvb = vector<vb>;
using pll = pair<ll,ll>;
using vpl = vector<pll>;
using vvp = vector<vpl>;
#define f first
#define s second
#define pb push_back
#define all(v) v.begin(),v.end()
vvb fur;
ll n, m;
vll sr, sc;
bool fu(ll i, ll j){
if(i<0 || i>=n || j<0 || j>=m)return 1;
else return fur[i][j];
}
bool pufu(ll i, ll j, bool c, vpl& pa){
bool d = 0;
if(i==0 && j==0)return 0;
if(i==n-1 && j==m-1)return 0;
if(i<0 || i>=n || j<0 || j>=m)return 0;
if(fu(i, j))return 0;
if(c || ((fu(i+1,j)&&fu(i,j+1)) || (fu(i-1,j)&&fu(i,j-1)))){
fur[i][j]=1;
pa.pb({i,j});
sr[i]--;
sc[j]--;
if(sr[i]==0||sc[j]==0)return 1;
d |= pufu(i+1,j,0,pa);
d |= pufu(i-1,j,0,pa);
d |= pufu(i,j+1,0,pa);
d |= pufu(i,j-1,0,pa);
}
return d;
}
void rev(vpl& pas){
for(auto [a,b]:pas){
fur[a][b]=0;
sr[a]++;
sc[b]++;
}
pas.clear();
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(NULL);
cin >> n >> m;
sr = vll(n,m);
sc = vll(m,n);
fur = vvb(n, vb(m));
bool c;
vpl pa;
for(ll i = 0; i < n; ++i){
for(ll j = 0; j < m; ++j){
cin >> c;
if(c==1)pufu(i, j, 1,pa);
}
}
ll q, a, b;
cin >> q;
while(q--){
cin >> a >> b;
a--;b--;
if(fu(a,b)){
cout << "1\n";
continue;
}
else{
vpl pas = {};
if(pufu(a,b, 1, pas)){
cout << "0\n";
rev(pas);
}
else{
cout << "1\n";
pas.clear();
}
}
}
}
Compilation message (stderr)
furniture.cpp: In function 'void rev(vpl&)':
furniture.cpp:43:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
43 | for(auto [a,b]:pas){
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |