Submission #1293821

#TimeUsernameProblemLanguageResultExecution timeMemory
1293821fairkrashDango Maker (JOI18_dango_maker)C++20
13 / 100
1 ms580 KiB
#include <bits/stdc++.h>
#include <random>

using namespace std;
using ll = int;
using ld = long double;
ll INF = 1e9;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    ll n, m;
    cin >> n >> m;
    vector<string> s(n);
    vector<vector<ll>> pref(n, vector<ll>(m));
    for (ll i = 0; i < n; i++) {
        cin >> s[i];
    }
    ll cnt = 0;
    for (ll i = 0; i < n; i++) {
        for (ll j = 0; j < m; j++) {
            if (s[i][j] == 'R') {
                if (j + 2 < m) {
                    if (s[i][j + 1] == 'G' && s[i][j + 2] == 'W') {
                        pref[i][j]++;
                        pref[i][j + 1]++;
                        pref[i][j + 2]++;
                        cnt++;
                    }
                }
                if (i + 2 < n) {
                    if (s[i + 1][j] == 'G' && s[i + 2][j] == 'W') {
                        pref[i][j]++;
                        pref[i + 1][j]++;
                        pref[i + 2][j]++;
                        cnt++;
                    }
                }
            }
        }
    }
    while (true) {
        ll c = 0;
        for (ll i = 0; i < n; i++) {
            for (ll j = 0; j < m; j++) {
                if (pref[i][j] == 2) {
                    c++;
                }
            }
        }
        if (c == 0) {
            break;
        }
        ll mx = 0;
        ll ind = -1;
        for (ll i = 0; i < n; i++) {
            for (ll j = 0; j < m; j++) {
                if (s[i][j] == 'R') {
                    if (j + 2 < m) {
                        if (s[i][j + 1] == 'G' && s[i][j + 2] == 'W') {
                            ll d = pref[i][j] + pref[i][j + 1] + pref[i][j + 2];
                            if (mx < d) {
                                mx = d;
                                ind = i * m + j;
                            }
                        }
                    }
                    if (i + 2 < n) {
                        if (s[i + 1][j] == 'G' && s[i + 2][j] == 'W') {
                            ll d = pref[i][j] + pref[i + 1][j] + pref[i + 2][j];
                            if (mx < d) {
                                mx = d;
                                ind = i * m + j;
                            }
                        }
                    }
                }
            }
        }
        cnt--;
        ll i = ind / m;
        ll j = ind % m;
        if (j + 2 < m) {
            if (s[i][j + 1] == 'G' && s[i][j + 2] == 'W') {
                ll d = pref[i][j] + pref[i][j + 1] + pref[i][j + 2];
                if (d == mx) {
                    pref[i][j]--;
                    pref[i][j + 1]--;
                    pref[i][j + 2]--;
                    continue;
                }
            }
        }
        if (i + 2 < n) {
            if (s[i + 1][j] == 'G' && s[i + 2][j] == 'W') {
                ll d = pref[i][j] + pref[i + 1][j] + pref[i + 2][j];
                if (d == mx) {
                    pref[i][j]--;
                    pref[i + 1][j]--;
                    pref[i + 2][j]--;
                    continue;
                }
            }
        }
    }
    cout << cnt;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...