Submission #1221217

#TimeUsernameProblemLanguageResultExecution timeMemory
1221217boclobanchatDango Maker (JOI18_dango_maker)C++20
33 / 100
346 ms327680 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=1e7+15; const int INF=1e9; vector<int> ds[MAXN]; int lay[MAXN],px[MAXN],py[MAXN],cnt[MAXN]; string s[3333]; bool bfs(int n) { queue<int> Q; for(int i=1;i<=n;i++) if(!px[i]) Q.push(i),lay[i]=0; else lay[i]=1e9; bool f=false; while(!Q.empty()) { int a=Q.front(); Q.pop(); for(auto v:ds[a]) if(px[a]!=v) { if(!py[v]) f=true; else if(lay[py[v]]==1e9) lay[py[v]]=lay[a]+1,Q.push(py[v]); } } return f; } bool dfs(int s) { for(int& i=cnt[s];i+1;i--) { int v=ds[s][i]; if(px[s]!=v) if(!py[v]||(lay[py[v]]==lay[s]+1&&dfs(py[v]))) { if(px[s]) py[px[s]]=0; px[s]=v,py[v]=s; return true; } } return false; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,sum=0; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>s[i]; s[i]=' '+s[i]; } for(int i=1;i<=n-2;i++) { for(int j=1;j<=m;j++) if(s[i][j]=='R'&&s[i+1][j]=='G'&&s[i+2][j]=='W') { if(j+1<m&&s[i][j]=='R'&&s[i][j+1]=='G'&&s[i][j+2]=='W') ds[(i-1)*m+j].push_back((i-1)*m+j); if(j>1&&j<m&&s[i+1][j-1]=='R'&&s[i+1][j]=='G'&&s[i+1][j+1]=='W') ds[(i-1)*m+j].push_back(i*m+j-1); if(j>2&&s[i+2][j-2]=='R'&&s[i+2][j-1]=='G'&&s[i+2][j]=='W') ds[(i-1)*m+j].push_back((i+1)*m+j-2); sum++; } } for(int i=1;i<=n;i++) for(int j=1;j<=m-2;j++) if(s[i][j]=='R'&&s[i][j+1]=='G'&&s[i][j+2]=='W') sum++; int ans=0; while(bfs(n*m)) { for(int i=1;i<=n*m;i++) cnt[i]=ds[i].size()-1; for(int i=1;i<=n*m;i++) if(!px[i]) ans+=dfs(i); } cout<<sum-ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...