Submission #850730

#TimeUsernameProblemLanguageResultExecution timeMemory
850730oscar1fFurniture (JOI20_furniture)C++17
100 / 100
237 ms28060 KiB
#include<bits/stdc++.h> using namespace std; const int TAILLE_MAX=1005; int nbLig,nbCol,nbReq,ligNouv,colNouv; int val[TAILLE_MAX][TAILLE_MAX]; int dvDeb[TAILLE_MAX][TAILLE_MAX],dvFin[TAILLE_MAX][TAILLE_MAX]; int acces[TAILLE_MAX][TAILLE_MAX]; int nbBon[2*TAILLE_MAX]; void DFS_deb(int lig,int col) { if (lig<=nbLig and col<=nbCol and dvDeb[lig][col]==0 and val[lig][col]==0) { dvDeb[lig][col]=1; DFS_deb(lig+1,col); DFS_deb(lig,col+1); } } void DFS_fin(int lig,int col) { if (lig>0 and col>0 and dvFin[lig][col]==0 and val[lig][col]==0) { dvFin[lig][col]=1; DFS_fin(lig-1,col); DFS_fin(lig,col-1); } } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>nbLig>>nbCol; for (int i=1;i<=nbLig;i++) { for (int j=1;j<=nbCol;j++) { cin>>val[i][j]; } } DFS_deb(1,1); DFS_fin(nbLig,nbCol); for (int i=1;i<=nbLig;i++) { for (int j=1;j<=nbCol;j++) { if (dvDeb[i][j]==1 and dvFin[i][j]==1) { acces[i][j]=1; nbBon[i+j]++; } } } deque<pair<int,int>> enCours; int lig,col,longueur; cin>>nbReq; for (int ireq=0;ireq<nbReq;ireq++) { cin>>ligNouv>>colNouv; if (acces[ligNouv][colNouv]==0) { cout<<1<<"\n"; } else if (nbBon[ligNouv+colNouv]==1) { cout<<0<<"\n"; } else { cout<<1<<"\n"; nbBon[ligNouv+colNouv]--; acces[ligNouv][colNouv]=0; enCours.push_back({ligNouv+1,colNouv}); enCours.push_back({ligNouv,colNouv+1}); while (!enCours.empty()) { longueur=enCours.size(); for (int i=0;i<longueur;i++) { lig=enCours.front().first; col=enCours.front().second; enCours.pop_front(); if (lig<=nbLig and col<=nbCol and acces[lig][col]==1 and acces[lig-1][col]==0 and acces[lig][col-1]==0) { acces[lig][col]=0; nbBon[lig+col]--; enCours.push_back({lig+1,col}); enCours.push_back({lig,col+1}); } } } enCours.push_back({ligNouv-1,colNouv}); enCours.push_back({ligNouv,colNouv-1}); while (!enCours.empty()) { longueur=enCours.size(); for (int i=0;i<longueur;i++) { lig=enCours.front().first; col=enCours.front().second; enCours.pop_front(); if (lig>0 and col>0 and acces[lig][col]==1 and acces[lig+1][col]==0 and acces[lig][col+1]==0) { acces[lig][col]=0; nbBon[lig+col]--; enCours.push_back({lig-1,col}); enCours.push_back({lig,col-1}); } } } } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...