제출 #1271313

#제출 시각아이디문제언어결과실행 시간메모리
1271313zulmuwCollecting Mushrooms (NOI18_collectmushrooms)C++20
100 / 100
24 ms36924 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long 

int r, c, d, k;
vector<pair<int,int>> vm, vs;
vector<vector<int>> ps;

signed main() {
  ios::sync_with_stdio(0); cin.tie(0);

  cin >> r >> c >> d >> k;
  ps.assign(r+5, vector<int> (c+5, 0));
  
  for (int i=0; i<r; ++i) {
    string s; cin >> s;
    for (int j=0; j<c; ++j) {
      if (s[j] == 'S') {
        vs.push_back({i, j});
      }
      if (s[j] == 'M') {
        vm.push_back({i, j});
      }
    }
  }
  
  for (auto [a, b] : vs) {
    int ul1 = max(0LL, a-d), ul2 = max(0LL, b-d); 
    int dr1 = min(r, a+d), dr2 = min(c, b+d);
    // cout << a << " " << b << "\n";
    // cout << " -> " << ul1 << " " << ul2 << " "<< dr1 << " "<< dr2 << "\n";
    
    ps[ul1][ul2]++;
    ps[dr1+1][ul2]--;
    ps[ul1][dr2+1]--;
    ps[dr1+1][dr2+1]++;

  //   for (int i = 0; i < r; ++i) {
  //     for (int j = 0; j < c; ++j) {
  //       cout << ps[i][j] << " ";
  //     }
  //     cout << "\n";
  //   }

  // cout << "\n\n";
  }
  
  for (int i=1; i<r; ++i) {
    for (int j=0; j<c; ++j) {
      ps[i][j] += ps[i-1][j];
    }
  }
  
  for (int i=0; i<r; ++i) {
    for (int j=1; j<c; ++j) {
      ps[i][j] += ps[i][j-1];
    }
  }
  
  int ans = 0;
  for (auto [a, b]: vm) {
    if (ps[a][b] >= k) ans++; 
  }
  cout << ans;
}

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