Submission #1280625

#TimeUsernameProblemLanguageResultExecution timeMemory
1280625historikCollecting Mushrooms (NOI18_collectmushrooms)C++20
60 / 100
988 ms7172 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m, d, k;
    cin >> n >> m >> d >> k;
    vector<vector<char> > v(n, vector<char> (m));
    vector<char> p(m + 1);
    vector<pair<int, int> > sp, ma;
    for(int i = 0;i < n;i++) {
        for(int j = 0;j < m;j++) {
            cin >> v[i][j];
            if(v[i][j] == 'M') {
                ma.push_back({i, j});
                p[j] = 'M';
            }
            if(v[i][j] == 'S') {
                p[j] = 'S';
                sp.push_back({i, j});
            }
        }
    }
    if(n == 1) {
        int cnt = 0;
        vector<int> mp(n + 1, 0);
        for(int i = 0;i < m;i++) {
            if(p[i] == 'S')
            for(int j = (int)min((int)0, i - d);j <= (int)max((int)m - 1, i + d);j++) {
                if(p[j] == 'M') {
                    mp[j]++;
                    if(mp[j] == k) cnt++;
                }
            }
        }
        cout << cnt;
        return 0;
    }
    int cnt = 0;
    map<pair<int, int>, int> mp;
    for(int i = 0;i < sp.size();i++) {
        for(int j = 0;j < ma.size();j++) {
            int q = max(abs(sp[i].first - ma[j].first), abs(sp[i].second - ma[j].second));
            if(q <= d) {
                mp[{ma[j].first, ma[j].second}]++;
                if(mp[{ma[j].first, ma[j].second}] == k) cnt++;
            }
        }
    }
    cout << cnt;
}
/*
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 3 4 1
2 4 3 1


1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 3 4
1 2 5 4 3
1 3 2 4 5
1 3 2 5 4
1 3 4 2 5
1 3 4 5 2
1 3 5 2 4
1 3 5 4 2
1 4

*/

#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...