Submission #1309489

#TimeUsernameProblemLanguageResultExecution timeMemory
1309489thecrazycandyCollecting Mushrooms (NOI18_collectmushrooms)C++20
100 / 100
18 ms20504 KiB
#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast")
//#pragma GCC target("avx,avx2,fma")
using namespace std;
#define ll long long
#define sped_up ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define rall(v) (v).rbegin(), (v).rend()
#define all(v) (v).begin(), (v).end()
#define pb push_back
#define S second
#define F first
const ll INF = (ll)1e9 + 1, INFL = (ll)1e18 + 1;
const ll mod = (ll)1e9 + 7, MAXN = (ll)1e5 + 1;
int main() {
    sped_up;
    ll n, m, d, k;
    cin >> n >> m >> d >> k;
    ll cnt = 0;
    ll a[n + 2][m + 2] = {};
    vector <pair <ll, ll>> v;
    for (ll i = 1; i <= n; i++) {
        for (ll j = 1; j <= m; j++) {
            char c;
            cin >> c;
            if ('S' == c) {
                a[max(1ll, i - d)][max(1ll, j - d)]++, a[max(1ll, i - d)][min(m, j + d) + 1]--;
                a[min(n, i + d) + 1][max(1ll, j - d)]--, a[min(n, i + d) + 1][min(m, j + d) + 1]++;
            }
            if ('M' == c) v.pb({i, j});
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            a[i][j] += a[i][j - 1];
        }
    }
    for (int j = 1; j <= m; j++) {
        for (int i = 1; i <= n; i++) {
            a[i][j] += a[i - 1][j];
        }
    }
    for (auto i : v) cnt += (a[i.F][i.S] >= k);
    cout << cnt;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...