Submission #1271708

#TimeUsernameProblemLanguageResultExecution timeMemory
1271708ofozCollecting Mushrooms (NOI18_collectmushrooms)C++20
38 / 100
15 ms22524 KiB
#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
#define int long long
#define vc vector<char>
#define vi vector<int>
#define vb vector<bool>
#define pi pair<int, int>
#define ppi pair<pair<int, int>, int>
#define multi multiset<int>
#define multp multiset<pi>
#define endl '\n'

const int INF = INT32_MAX;
const int MOD = 998244353;
const int S = 400;
const int MAXVAL = 4e5+5;
vector<vi> pFact(MAXVAL);


void solve() {
    int r, c, d, k;
    cin >> r >> c >> d >> k;
    vector<string> grid(r);
    vector<vi> sum(r, vi(c, 0));
    for (int i = 0; i < r; i++) cin >> grid[i];
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            if (grid[i][j] != 'S') continue;
            int x = max(i - d, 0ll), y = max(j - d, 0ll);
            sum[x][y]++;
            if (i + d + 1 < r) {
                sum[i+d+1][y]--;
            }
            if (j + d + 1 < c) {
                sum[x][j+d+1]--;
            }
            if ((i + d + 1 < r) && (j + d + 1 < c)) {
                sum[i+d+1][j+d+1]++;
            }
        }
    }
    vector<vi> prfx(r, vi(c, 0));
    prfx[0][0] = sum[0][0];
    for (int i = 1; i < r; i++) {
        prfx[i][0] = prfx[i-1][0] + sum[i][0];
    }
    for (int j = 1; j < c; j++) {
        prfx[0][j] = prfx[0][j-1] + sum[0][j];
    }
    for (int i = 1; i < r; i++) {
        for (int j = 1; j < c; j++) {
            prfx[i][j] = prfx[i-1][j] + prfx[i][j-1] - prfx[i-1][j-1];
        }
    }
    int res = 0;
    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            if (grid[i][j] != 'M') continue;
            if (prfx[i][j] >= k) res++;
        }
    }
    cout << res << endl;
}

/*
0 0 0 0 0 
0 1 0 0 -1 
1 0 0 -1 0 
0 0 0 0 0 
0 -1 0 0 1 
*/
 
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    bool test = 0;
    int t;
    if (!test) t = 1;
    else cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
#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...