Submission #918754

#TimeUsernameProblemLanguageResultExecution timeMemory
918754waldiFurniture (JOI20_furniture)C++17
100 / 100
241 ms15960 KiB
#include <bits/stdc++.h> #define FOR(i,p,k) for(int i=(p);i<=(k);++i) #define REP(i,n) FOR(i,0,(n)-1) #define ssize(x) (int(x.size())) #define all(x) (x).begin(),(x).end() #define fi first #define se second using namespace std; typedef pair<int, int> pii; int main(){ int n, m; scanf("%d%d", &n, &m); vector czy(n, vector(m, 1)); vector suma(n+m-1, 0); REP(i, n) REP(j, m) ++suma[i+j]; auto usun = [&](int si, int sj){ if(!czy[si][sj]) return; czy[si][sj] = 0; --suma[si+sj]; queue<pii> q; q.emplace(si+1, sj); q.emplace(si, sj+1); while(ssize(q)){ auto [i, j] = q.front(); q.pop(); if(i<0 || j<0 || i>=n || j>=m || !czy[i][j]) continue; if(i && czy[i-1][j]) continue; if(j && czy[i][j-1]) continue; czy[i][j] = 0; --suma[i+j]; q.emplace(i+1, j); q.emplace(i, j+1); } q.emplace(si-1, sj); q.emplace(si, sj-1); while(ssize(q)){ auto [i, j] = q.front(); q.pop(); if(i<0 || j<0 || i>=n || j>=m || !czy[i][j]) continue; if(i+1<n && czy[i+1][j]) continue; if(j+1<m && czy[i][j+1]) continue; czy[i][j] = 0; --suma[i+j]; q.emplace(i-1, j); q.emplace(i, j-1); } }; auto niemoge = [&](int i, int j){ if(!czy[i][j]) return false; return suma[i+j] == 1; }; REP(i, n) REP(j, m){ int a; scanf("%d", &a); if(a) usun(i, j); } int q; scanf("%d", &q); while(q--){ int i, j; scanf("%d%d", &i, &j); --i, --j; if(niemoge(i, j)) printf("0\n"); else usun(i, j), printf("1\n"); } return 0; }

Compilation message (stderr)

furniture.cpp: In function 'int main()':
furniture.cpp:13:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |  scanf("%d%d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~
furniture.cpp:58:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |   scanf("%d", &a);
      |   ~~~~~^~~~~~~~~~
furniture.cpp:63:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |  scanf("%d", &q);
      |  ~~~~~^~~~~~~~~~
furniture.cpp:66:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |   scanf("%d%d", &i, &j);
      |   ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...