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>
#include<fstream>
using namespace std;
ifstream fin("FEEDING.INP");
ofstream fout("FEEDING.OUT");
#define sz(a) (int)a.size()
#define ll long long
#define pb push_back
#define forr(i, a, b) for(int i = a; i < b; i++)
#define dorr(i, a, b) for(int i = a; i >= b; i--)
#define ld long double
#define vt vector
#include<fstream>
#define fi first
#define se second
#define pll pair<ll, ll>
#define pii pair<int, int>
const ld PI = 3.14159265359;
using u128 = __uint128_t;
const int x[4] = {1, -1, 0, 0};
const int y[4] = {0, 0, 1, -1};
const ll mod = 1e15 + 7, inf = 1e16;
const int mxn = 2e3 + 5;
int n, m, q;
int a[1005][1005];
int cnt[2005];
bool bad[1005][1005];
bool ck(int x, int y){
if(x == n && y == m)return(0);
if(bad[x][y])return(0);
if(bad[x + 1][y] && bad[x][y + 1])return(1);
if(bad[x - 1][y] && bad[x][y - 1])return(1);
return(0);
}
bool inside(int x, int y){
return(x >= 1 && y >= 1 && x <= n && y <= m);
}
signed main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> a[i][j];
if(a[i][j] == 1){
bad[i][j] = 1;
}else{
cnt[i + j]++;
}
}
}
for(int i = 1; i <= n; i++)bad[i][m + 1] = 1;
for(int i = 1; i <= m; i++)bad[n + 1][i] = 1;
queue<pii>q;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(a[i][j] == 1){
for(int k = 0; k < 4; k++){
if(inside(i + x[k], j + y[k]) && !bad[i + x[k]][j + y[k]]){
q.push({i + x[k], j + y[k]});
}
}
}
}
}
while(!q.empty()){
auto [cox, coy] = q.front(); q.pop();
//cout << cox << ' ' << coy << " ";
if(ck(cox, coy)){
bad[cox][coy] = 1; cnt[cox + coy]--;
for(int i = 0; i < 4; i++){
int nwx = cox + x[i], nwy = coy + y[i];
if(inside(nwx, nwy) && !bad[nwx][nwy]){
q.push({nwx, nwy});
}
}
}
}
int qq; cin >> qq;
while(qq--){
int cox, coy; cin >> cox >> coy;
//assert(cnt[cox + coy] >= 1);
if(bad[cox][coy]){
cout << 1 << "\n";
}
else if(cnt[cox + coy] == 1){
cout << 0 << "\n";
continue;
}else{
cout << 1 << "\n";
int xx = cox, yy = coy;
bad[cox][coy] = 1; cnt[cox + coy]--;
for(int i = 0; i < 4; i++){
int nwx = cox + x[i], nwy = coy + y[i];
if(inside(nwx, nwy) && !bad[nwx][nwy]){
q.push({nwx, nwy});
}
}
while(!q.empty()){
auto [cox, coy] = q.front(); q.pop();
if(ck(cox, coy)){
//assert(cox == xx || cox + coy != xx + yy);
bad[cox][coy] = 1; cnt[cox + coy]--;
for(int i = 0; i < 4; i++){
int nwx = cox + x[i], nwy = coy + y[i];
if(inside(nwx, nwy) && !bad[nwx][nwy]){
q.push({nwx, nwy});
}
}
}
}
}
}
return(0);
}
Compilation message (stderr)
furniture.cpp: In function 'int main()':
furniture.cpp:67:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
67 | auto [cox, coy] = q.front(); q.pop();
| ^
furniture.cpp:102:22: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
102 | auto [cox, coy] = q.front(); q.pop();
| ^
furniture.cpp:93:17: warning: unused variable 'xx' [-Wunused-variable]
93 | int xx = cox, yy = coy;
| ^~
furniture.cpp:93:27: warning: unused variable 'yy' [-Wunused-variable]
93 | int xx = cox, yy = coy;
| ^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |