Submission #1290324

#TimeUsernameProblemLanguageResultExecution timeMemory
1290324yonatanlCollecting Mushrooms (NOI18_collectmushrooms)C++20
100 / 100
25 ms19308 KiB
#include <iostream> #include <vector> #include <algorithm> #include <set> #define rep(i, s, e) for (ll i = s; i < e; i++) #define upmax(a, b) a = max(a, b) #define upmin(a, b) a = min(a, b) using namespace std; using ll = long long; using vll = vector<ll>; using vvll = vector<vll>; using pll = pair<ll, ll>; using vpll = vector<pll>; void solve() { ll n, m, D, K; cin >> n >> m >> D >> K; vvll arr(n, vll(m, 0)); vpll mushrooms; rep(i, 0, n) { rep(j, 0, m) { char c; cin >> c; if (c == 'S') arr[i][j] = 1; else if (c == 'M') mushrooms.push_back({ i, j }); } } vvll pref(n, vll(m)); pref[0][0] = arr[0][0]; rep(i, 1, m) pref[0][i] = pref[0][i - 1] + arr[0][i]; rep(i, 1, n) pref[i][0] = pref[i - 1][0] + arr[i][0]; rep(i, 1, n) { rep(j, 1, m) { pref[i][j] = pref[i][j - 1] + pref[i - 1][j] - pref[i - 1][j - 1] + arr[i][j]; } } ll ans = 0; rep(i, 0, mushrooms.size()) { ll x = mushrooms[i].first; ll y = mushrooms[i].second; ll x1 = max((ll)0, x - D); ll x2 = min(n - 1, x + D); ll y1 = max((ll)0, y - D); ll y2 = min(m - 1, y + D); // Calc the sum in the rectangle: ll sum = pref[x2][y2]; if (y1 > 0) sum -= pref[x2][y1 - 1]; if (x1 > 0) sum -= pref[x1 - 1][y2]; if (x1 > 0 && y1 > 0) sum += pref[x1 - 1][y1 - 1]; if (sum >= K) ans++; } cout << ans << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); solve(); }
#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...