Submission #1014857

#TimeUsernameProblemLanguageResultExecution timeMemory
1014857ByeWorldDango Maker (JOI18_dango_maker)C++14
0 / 100
1 ms348 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3", "unroll-loops") #define ll long long // #define int long long #define pb push_back #define fi first #define se second #define lf (id<<1) #define rg ((id<<1)|1) #define md ((l+r)>>1) #define ld long double using namespace std; typedef pair<int,int> pii; typedef pair<int, pii> ipii; const int MAXN = 3002; int n, m; char a[MAXN][MAXN]; int b[MAXN][MAXN], cnt; vector <vector<int>> adj; void add(int x, int y){ adj[y].pb(x); } int day; vector <int> mat, vis; vector<bool> done; bool dfs(int nw){ if(vis[nw] == day) return 0; vis[nw] = day; for(auto nx : adj[nw]){ if(mat[nx]==0 || dfs(mat[nx])){ mat[nx] = nw; return 1; } } return 0; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin >> n >> m; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cin >> a[i][j]; vector<int>te; adj.pb(te); int c1 = 0, c2 = 0; for(int i=1; i<=n; i++){ for(int j=1; j<=m-2; j++){ if(a[i][j]=='R' && a[i][j+1]=='G' && a[i][j+2]=='W'){ c1++; } } } for(int i=1; i<=n-2; i++){ for(int j=1; j<=m; j++){ if(a[i][j]=='R' && a[i+1][j]=='G' && a[i+2][j]=='W'){ c2++; } } } int num = 0; // if(c1 < c2){ for(int i=1; i<=n; i++){ for(int j=1; j<=m-2; j++){ if(a[i][j]=='R' && a[i][j+1]=='G' && a[i][j+2]=='W'){ adj.pb(te); b[i][j] = ++cnt; b[i][j+1] = cnt; b[i][j+2] = cnt; } } } num = cnt; for(int i=1; i<=n-2; i++){ for(int j=1; j<=m; j++){ if(a[i][j]=='R' && a[i+1][j]=='G' && a[i+2][j]=='W'){ ++cnt; add(cnt, b[i][j]); add(cnt, b[i+1][j]); add(cnt, b[i+2][j]); } } } // } else { // for(int i=1; i<=n-2; i++){ // for(int j=1; j<=m; j++){ // if(a[i][j]=='R' && a[i+1][j]=='G' && a[i+2][j]=='W'){ // adj.pb(te); // ++cnt; // b[i][j] = cnt; // b[i+1][j] = cnt; // b[i+2][j] = cnt; // } // } // } // num = cnt; // for(int i=1; i<=n; i++){ // for(int j=1; j<=m-2; j++){ // if(a[i][j]=='R' && a[i][j+1]=='G' && a[i][j+2]=='W'){ // ++cnt; // add(cnt, b[i][j]); // add(cnt, b[i][j+1]); // add(cnt, b[i][j+2]); // } // } // } // } mat.resize(num+2); vis.resize(num+2); done.resize(num+2); int ANS = 0; for(int i=1; i<=num; i++){ for(auto nx : adj[i]){ if(mat[nx] == 0){ mat[nx] = i; done[i] = 1; ANS++; break; } } } for(int i=1; i<=num; i++){ if(done[i]) continue; day++; ANS += dfs(i); } cout << cnt-ANS << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...