Submission #1287191

#TimeUsernameProblemLanguageResultExecution timeMemory
1287191StefanSebezFurniture (JOI20_furniture)C++20
100 / 100
294 ms14356 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double #define mp make_pair const int N=1010; int a[N][N],n,m; int b[2][N][N]; void Update(int type,int x,int y){ if(b[type][x][y]==0) return; vector<pair<int,int>>upd; if(type==1){ for(int i=x-1;i>=1&&b[type][i][y];i--){ b[type][i][y]=0; b[type][i+1][y-1]=1; if(a[i+1][y-1]) upd.pb({i+1,y-1}); } for(int j=y+1;j<=m&&b[type][x][j];j++){ b[type][x][j]=0; b[type][x+1][j-1]=1; if(a[x+1][j-1]) upd.pb({x+1,j-1}); } b[type][x][y]=0; b[type][x+1][y-1]=1; if(a[x+1][y-1]) upd.pb({x+1,y-1}); for(auto [x,y]:upd) Update(type,x,y); } else{ for(int i=x+1;i<=n&&b[type][i][y];i++){ b[type][i][y]=0; b[type][i-1][y+1]=1; if(a[i-1][y+1]) upd.pb({i-1,y+1}); } for(int j=y-1;j>=1&&b[type][x][j];j--){ b[type][x][j]=0; b[type][x-1][j+1]=1; if(a[x-1][j+1]) upd.pb({x-1,j+1}); } b[type][x][y]=0; b[type][x-1][y+1]=1; if(a[x-1][y+1]) upd.pb({x-1,y+1}); for(auto [x,y]:upd) Update(type,x,y); } } int main(){ scanf("%i%i",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%i",&a[i][j]); } } for(int j=1;j<=m;j++) b[0][n][j]=b[1][1][j]=1; for(int i=1;i<=n;i++) b[0][i][1]=b[1][i][m]=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]&&b[0][i][j]) Update(0,i,j); if(a[i][j]&&b[1][i][j]) Update(1,i,j); } } int q;scanf("%i",&q); while(q--){ int x,y;scanf("%i%i",&x,&y); if(a[x][y]==1||(b[0][x][y]&&b[1][x][y])){printf("0\n");continue;} a[x][y]=1; Update(0,x,y); Update(1,x,y); printf("%i\n",a[x][y]); } return 0; }

Compilation message (stderr)

furniture.cpp: In function 'int main()':
furniture.cpp:49:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |     scanf("%i%i",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~
furniture.cpp:52:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |             scanf("%i",&a[i][j]);
      |             ~~~~~^~~~~~~~~~~~~~~
furniture.cpp:63:16: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   63 |     int q;scanf("%i",&q);
      |           ~~~~~^~~~~~~~~
furniture.cpp:65:22: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   65 |         int x,y;scanf("%i%i",&x,&y);
      |                 ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...