Submission #206447

#TimeUsernameProblemLanguageResultExecution timeMemory
206447stefdascaDango Maker (JOI18_dango_maker)C++14
13 / 100
5 ms388 KiB
#include<bits/stdc++.h> using namespace std; int n, m; char a[3002][3002]; bool viz[3002][3002], scos[3002][3002]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for(int i = 1; i <= n; ++i) cin >> (a[i] + 1); int dir = 1; int L = 1; int C = 1; int rem = n*m; int ans = 0; while(rem >= 0) { int okb = 0; if(rem == 0) okb = 1; // cout << L << " " << C << " " << dir << " " << rem << '\n'; if(dir == 1) { if(rem != n*m) { ++L; viz[L][C] = 0; ++rem; } while(C <= m && !viz[L][C]) { if(C+2 <= m && a[L][C] == 'R' && a[L][C+1] == 'G' && a[L][C+2] == 'W') if(!scos[L][C] && !scos[L][C+1] && !scos[L][C+2]) { // cout << L << " " << C << '\n'; scos[L][C] = scos[L][C+1] = scos[L][C+2] = 1; ++ans; } if(a[L][C-1] == 'R' && a[L][C] == 'G' && a[L][C+1] == 'W') { if(!scos[L][C-1] && !scos[L][C] && !scos[L][C+1]) { // cout << L << " " << C-1 << '\n'; scos[L][C-1] = scos[L][C] = scos[L][C+1] = 1; ++ans; } } if(C - 2 > 0 && a[L][C-2] == 'R' && a[L][C-1] == 'G' && a[L][C] == 'W') { if(!scos[L][C-2] && !scos[L][C-1] && !scos[L][C]) { // cout << L << " " << C - 2 << '\n'; scos[L][C-2] = scos[L][C-1] = scos[L][C] = 1; ++ans; } } viz[L][C] = 1; --rem; ++C; } dir = 2; } else if(dir == 2) { --C; ++rem; viz[L][C] = 0; while(L <= n && !viz[L][C]) { if(L+2 <= n && a[L][C] == 'R' && a[L+1][C] == 'G' && a[L+2][C] == 'W') { if(!scos[L][C] && !scos[L+1][C] && !scos[L+2][C]) { // cout << L << " " << C << '\n'; ++ans; scos[L][C] = scos[L+1][C] = scos[L+2][C] = 1; } } if(L-2 >= 0 && a[L-2][C] == 'R' && a[L-1][C] == 'G' && a[L][C] == 'W') { if(!scos[L-2][C] && !scos[L-1][C] && !scos[L][C]) { // cout << L << " " << C << '\n'; ++ans; scos[L-2][C] = scos[L-1][C] = scos[L][C] = 1; } } if(a[L-1][C] == 'R' && a[L][C] == 'G' && a[L+1][C] == 'W') { if(!scos[L-1][C] && !scos[L][C] && !scos[L+1][C]) { ++ans; // cout << L << " " << C << '\n'; scos[L-1][C] = scos[L][C] = scos[L+1][C] = 1; } } viz[L][C] = 1; --rem; ++L; } dir = 3; } else if(dir == 3) { ++rem; --L; viz[L][C] = 0; while(C && !viz[L][C]) { if(C+2 <= m && a[L][C] == 'R' && a[L][C+1] == 'G' && a[L][C+2] == 'W') if(!scos[L][C] && !scos[L][C+1] && !scos[L][C+2]) { // cout << L << " " << C << '\n'; scos[L][C] = scos[L][C+1] = scos[L][C+2] = 1; ++ans; } if(a[L][C-1] == 'R' && a[L][C] == 'G' && a[L][C+1] == 'W') { if(!scos[L][C-1] && !scos[L][C] && !scos[L][C+1]) { // cout << L << " " << C-1 << '\n'; scos[L][C-1] = scos[L][C] = scos[L][C+1] = 1; ++ans; } } if(C - 2 > 0 && a[L][C-2] == 'R' && a[L][C-1] == 'G' && a[L][C] == 'W') { if(!scos[L][C-2] && !scos[L][C-1] && !scos[L][C]) { // cout << L << " " << C - 2 << '\n'; scos[L][C-2] = scos[L][C-1] = scos[L][C] = 1; ++ans; } } viz[L][C] = 1; --rem; --C; } dir = 4; } else { ++rem; ++C; viz[L][C] = 0; while(L && !viz[L][C]) { if(L+2 <= n && a[L][C] == 'R' && a[L+1][C] == 'G' && a[L+2][C] == 'W') { if(!scos[L][C] && !scos[L+1][C] && !scos[L+2][C]) { // cout << L << " " << C << '\n'; ++ans; scos[L][C] = scos[L+1][C] = scos[L+2][C] = 1; } } if(L-2 >= 0 && a[L-2][C] == 'R' && a[L-1][C] == 'G' && a[L][C] == 'W') { if(!scos[L-2][C] && !scos[L-1][C] && !scos[L][C]) { // cout << L << " " << C << '\n'; ++ans; scos[L-2][C] = scos[L-1][C] = scos[L][C] = 1; } } if(a[L-1][C] == 'R' && a[L][C] == 'G' && a[L+1][C] == 'W') { if(!scos[L-1][C] && !scos[L][C] && !scos[L+1][C]) { ++ans; // cout << L << " " << C << '\n'; scos[L-1][C] = scos[L][C] = scos[L+1][C] = 1; } } viz[L][C] = 1; --rem; --L; } dir = 1; } if(okb) break; } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...