Submission #566701

#TimeUsernameProblemLanguageResultExecution timeMemory
566701GusterGoose27Dango Maker (JOI18_dango_maker)C++11
13 / 100
1 ms340 KiB
#include <iostream> #include <vector> using namespace std; const int MAXN = 3000; int val[MAXN][MAXN]; // 0 red, 1 g, 2 w int n, m; int uf[2*MAXN*MAXN]; // cuz im lazy int num_0[2*MAXN*MAXN]; int size[2*MAXN*MAXN]; int common[MAXN*MAXN]; bool visited[2*MAXN*MAXN]; int find(int i) { if (uf[i] == -1) return i; return (uf[i] = find(uf[i])); } void merge(int a, int b) { int ida = find(a); int idb = find(b); if (ida == idb) return; num_0[ida] += num_0[idb]; size[ida] += size[idb]; uf[idb] = ida; } bool is_vertical(int i, int j) { if (i >= n-2) return 0; return (val[i][j] == 0 && val[i+1][j] == 1 && val[i+2][j] == 2); } bool is_horizontal(int i, int j) { if (j >= m-2) return 0; return (val[i][j] == 0 && val[i][j+1] == 1 && val[i][j+2] == 2); } void add(int a, int b) { if (common[a] == -1) common[a] = b; else merge(common[a], b); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) common[i*m+j] = -1; } for (int i = 0; i < n; i++) { string s; cin >> s; for (int j = 0; j < m; j++) { if (s[j] == 'R') val[i][j] = 0; if (s[j] == 'G') val[i][j] = 1; if (s[j] == 'W') val[i][j] = 2; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int chash = i*m+j; if (is_vertical(i, j)) { uf[chash] = -1; size[chash] = 1; num_0[chash] = 1; add(chash, chash); add(chash+m, chash); add(chash+2*m, chash); } if (is_horizontal(i, j)) { uf[chash+n*m] = -1; size[chash+n*m] = 1; num_0[chash+n*m] = 0; add(chash, chash+n*m); add(chash+1, chash+n*m); add(chash+2, chash+n*m); } } } int answ = 0; for (int i = 0; i < 2*n*m; i++) { if (uf[i] == -1) answ += max(size[i]-num_0[i], num_0[i]); } cout << answ << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...