Submission #421096

#TimeUsernameProblemLanguageResultExecution timeMemory
421096inwbearFurniture (JOI20_furniture)C++14
5 / 100
5015 ms21808 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define all(x) (x).begin(),(x).end() #define MEM(x,a) memset((x),a,sizeof((x))) #define F first #define S second #define imx INT_MAX const long long MOD = (long long)(1e9+7); const long long MMX = (long long)(1e18); typedef long long LL; typedef pair<int,int> pii; int n,m,q,xi,xj,co[1005][1005][2],k,fur[1005][1005],mi,cp[1005][1005][2]; bool cc; queue<pair<int,int> >qq; int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&fur[i][j]); } } co[1][1][0]=1; co[n][m][1]=1; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(fur[i][j]==1||co[i][j][0]==0)continue; if(fur[i+1][j]==0)co[i+1][j][0]++; if(fur[i][j+1]==0)co[i][j+1][0]++; } } for(int i=n;i>0;i--) { for(int j=m;j>0;j--) { if(fur[i][j]==1||co[i][j][1]==0)continue; if(fur[i-1][j]==0)co[i-1][j][1]++; if(fur[i][j-1]==0)co[i][j-1][1]++; } } scanf("%d",&q); while(q--) { cc=false; scanf("%d %d",&xi,&xj); //for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cp[i][j][0]=0,cp[i][j][1]=0; // cp[1][1][0]=1; // cp[n][m][1]=1; // for(int i=1;i<=n;i++) // { // for(int j=1;j<=m;j++) // { // if(fur[i][j]==1||cp[i][j][0]==0)continue; // if(fur[i+1][j]==0)cp[i+1][j][0]++; // if(fur[i][j+1]==0)cp[i][j+1][0]++; // } // } // for(int i=n;i>0;i--) // { // for(int j=m;j>0;j--) // { // if(fur[i][j]==1||cp[i][j][1]==0)continue; // if(fur[i-1][j]==0)cp[i-1][j][1]++; // if(fur[i][j-1]==0)cp[i][j-1][1]++; // } // } // printf("-------------------\n"); // for(int i=1;i<=n;i++) // { // for(int j=1;j<=m;j++) // { // //if(co[i][j][0]!=cp[i][j][0])printf("%d %d\n",i,j); // //if(co[i][j][1]!=cp[i][j][1])printf("%d %d\n",i,j); // printf("[%d %d %d %d] ",co[i][j][0],cp[i][j][0],co[i][j][1],cp[i][j][1]); // } // printf("\n"); // } mi=1; for(int i=xi-1;i>0;i--) { if(fur[i][xj]==1)mi=0; if(co[i][xj][0]>0&&co[i][xj][1]-mi>0) { cc=true; break; } } mi=1; if(!cc) for(int j=xj-1;j>0;j--) { if(fur[xi][j]==1)mi=0; if(co[xi][j][0]>0&&co[xi][j][1]-mi>0) { cc=true; break; } } mi=1; if(!cc) for(int i=xi+1;i<=n;i++) { if(fur[i][xj]==1)mi=0; if(co[i][xj][0]-mi>0&&co[i][xj][1]>0) { cc=true; break; } } mi=1; if(!cc) for(int j=xj+1;j<=m;j++) { if(fur[xi][j]==1)mi=0; if(co[xi][j][0]-mi>0&&co[xi][j][1]>0) { cc=true; break; } } if(cc) { printf("1\n"); fur[xi][xj]=1; if(co[xi][xj][0]>0) { co[xi][xj][0]=0; qq.push({xi,xj}); while(!qq.empty()) { if(qq.front().F+1<=n) { co[qq.front().F+1][qq.front().S][0]--; if(co[qq.front().F+1][qq.front().S][0]==0) { qq.push({qq.front().F+1,qq.front().S}); } } if(qq.front().S+1<=m) { co[qq.front().F][qq.front().S+1][0]--; if(co[qq.front().F][qq.front().S+1][0]==0) { qq.push({qq.front().F,qq.front().S+1}); } } qq.pop(); } } if(co[xi][xj][1]>0) { co[xi][xj][1]=0; qq.push({xi,xj}); while(!qq.empty()) { if(qq.front().F-1>0) { co[qq.front().F-1][qq.front().S][1]--; if(co[qq.front().F-1][qq.front().S][1]==0) { qq.push({qq.front().F-1,qq.front().S}); } } if(qq.front().S-1>0) { co[qq.front().F][qq.front().S-1][1]--; if(co[qq.front().F][qq.front().S-1][1]==0) { qq.push({qq.front().F,qq.front().S-1}); } } qq.pop(); } } } else printf("0\n"); } }

Compilation message (stderr)

furniture.cpp: In function 'int main()':
furniture.cpp:20:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |     scanf("%d %d",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~~
furniture.cpp:25:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |             scanf("%d",&fur[i][j]);
      |             ~~~~~^~~~~~~~~~~~~~~~~
furniture.cpp:48:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |     scanf("%d",&q);
      |     ~~~~~^~~~~~~~~
furniture.cpp:52:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |         scanf("%d %d",&xi,&xj);
      |         ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...