Submission #298766

#TimeUsernameProblemLanguageResultExecution timeMemory
298766Pro_ktmrFurniture (JOI20_furniture)C++14
100 / 100
545 ms24952 KiB
#pragma GCC target ("avx2") #pragma GCC optimize ("unroll-loops") #pragma GCC optimize ("O3") #include "bits/stdc++.h" #include <unordered_set> #include <unordered_map> #include <random> using namespace std; typedef long long ll; const ll MOD = 1'000'000'007LL; /*998'244'353LL;*/ #define pb push_back #define mp make_pair #define all(x) (x).begin(), (x).end() #define rep(i, n) for(int (i)=0; (i)<(n); (i)++) const int dx[4]={ 1,0,-1,0 }; const int dy[4]={ 0,1,0,-1 }; int H, W; int C[1002][1002] = {}; int Q; int Y[1000000], X[1000000]; queue<pair<int,int>> que; void fill2(int i, int j, int dy, int dx){ if(i < 0 || H+2 <= i || j < 0 || W+2 <= j) return; if(C[i][j] == 2) return; C[i][j] = 2; fill2(i+dy, j+dx, dy, dx); if(C[i+1][j-1] == 1) que.push({i+1, j-1}); } void fill3(int i, int j, int dy, int dx){ if(i < 0 || H+2 <= i || j < 0 || W+2 <= j) return; if(C[i][j] == 3) return; C[i][j] = 3; fill3(i+dy, j+dx, dy, dx); if(C[i-1][j+1] == 1) que.push({i-1, j+1}); } bool solved[1002][1002] = {}; void solve(){ while(!que.empty()){ int i = que.front().first; int j = que.front().second; que.pop(); if(solved[i][j]) continue; if(C[i-1][j+1] == 2 && C[i+1][j-1] == 3) return; C[i][j] = 1; if(C[i-1][j+1] == 2){ fill2(i, j, -1, 0); C[i][j] = 1; fill2(i, j, 0, 1); solved[i][j] = true; } if(C[i+1][j-1] == 3){ fill3(i, j, 1, 0); C[i][j] = 1; fill3(i, j, 0, -1); solved[i][j] = true; } } } void print(){ /*for(int i=0; i<H+2; i++){ for(int j=0; j<W+2; j++){ printf("%d", C[i][j]); } printf("\n"); }*/ } signed main(){ scanf("%d%d", &H, &W); rep(i, H){ rep(j, W){ scanf("%d", &C[i+1][j+1]); } } scanf("%d", &Q); rep(i, Q){ scanf("%d%d", &Y[i], &X[i]); } for(int j=2; j<W+2; j++) C[0][j] = 2; for(int i=0; i<H; i++) C[i][W+1] = 2; for(int j=0; j<W; j++) C[H+1][j] = 3; for(int i=2; i<H+2; i++) C[i][0] = 3; print(); for(int i=1; i<H+1; i++){ for(int j=1; j<W+1; j++){ if(C[i][j] == 1){ que.push({i,j}); } } } solve(); print(); rep(i, Q){ que.push({Y[i],X[i]}); solve(); printf("%d\n", C[Y[i]][X[i]] != 0); } print(); }

Compilation message (stderr)

furniture.cpp: In function 'int main()':
furniture.cpp:14:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   14 | #define rep(i, n) for(int (i)=0; (i)<(n); (i)++)
      |                           ^
furniture.cpp:76:5: note: in expansion of macro 'rep'
   76 |     rep(i, H){
      |     ^~~
furniture.cpp:14:27: warning: unnecessary parentheses in declaration of 'j' [-Wparentheses]
   14 | #define rep(i, n) for(int (i)=0; (i)<(n); (i)++)
      |                           ^
furniture.cpp:77:9: note: in expansion of macro 'rep'
   77 |         rep(j, W){
      |         ^~~
furniture.cpp:14:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   14 | #define rep(i, n) for(int (i)=0; (i)<(n); (i)++)
      |                           ^
furniture.cpp:82:5: note: in expansion of macro 'rep'
   82 |     rep(i, Q){
      |     ^~~
furniture.cpp:14:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   14 | #define rep(i, n) for(int (i)=0; (i)<(n); (i)++)
      |                           ^
furniture.cpp:102:5: note: in expansion of macro 'rep'
  102 |     rep(i, Q){
      |     ^~~
furniture.cpp:75:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   75 |     scanf("%d%d", &H, &W);
      |     ~~~~~^~~~~~~~~~~~~~~~
furniture.cpp:78:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   78 |             scanf("%d", &C[i+1][j+1]);
      |             ~~~~~^~~~~~~~~~~~~~~~~~~~
furniture.cpp:81:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   81 |     scanf("%d", &Q);
      |     ~~~~~^~~~~~~~~~
furniture.cpp:83:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   83 |         scanf("%d%d", &Y[i], &X[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...