Submission #464097

#TimeUsernameProblemLanguageResultExecution timeMemory
464097JasiekstrzSkandi (COCI20_skandi)C++17
110 / 110
152 ms34164 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=500; bool t[N+10][N+10]; tuple<int,int,string> prnt[2][N*N+10]; int d[N+10][N+10]; int r[N+10][N+10]; bool vis[2][N*N+10]; int mtch[2][N*N+10]; vector<int> e[N*N+10]; bool dfs(int x) { vis[0][x]=true; for(auto v:e[x]) { if(vis[1][v]) continue; vis[1][v]=true; if(mtch[1][v]==0 || (!vis[0][mtch[1][v]] && dfs(mtch[1][v]))) { mtch[1][v]=x; mtch[0][x]=v; return true; } } return false; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { char c; cin>>c; t[i][j]=(c=='1'); } } int nd=0,nr=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { d[i][j]=d[i-1][j]; r[i][j]=r[i][j-1]; if(!t[i][j]) { e[d[i][j]].push_back(r[i][j]); } else { if(i<n && !t[i+1][j]) { nd++; prnt[0][nd]={i,j,"DOLJE"}; d[i][j]=nd; } if(j<m && !t[i][j+1]) { nr++; prnt[1][nr]={i,j,"DESNO"}; r[i][j]=nr; } } } } bool con=true; while(con) { con=false; for(int i=1;i<=n*m;i++) vis[0][i]=vis[1][i]=false; for(int i=1;i<=nd;i++) { if(mtch[0][i]==0 && !vis[0][i] && dfs(i)) con=true; } } vector<tuple<int,int,string>> ans; for(int i=1;i<=nd;i++) { if(!vis[0][i] && mtch[0][i]!=0) ans.push_back(prnt[0][i]); } for(int i=1;i<=nr;i++) { if(vis[1][i] && mtch[1][i]!=0) ans.push_back(prnt[1][i]); } cout<<ans.size()<<"\n"; for(auto [a,b,c]:ans) cout<<a<<" "<<b<<" "<<c<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...