Submission #646544

#TimeUsernameProblemLanguageResultExecution timeMemory
646544kith14Collecting Mushrooms (NOI18_collectmushrooms)C++17
100 / 100
1220 ms50760 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define db double
#define pairll pair<ll,ll>
#define lpairll pair<ll,pairll>

#define repp(i,a,b) for (ll i = a; i <= b; i++)
#define repz(i,a,b) for (ll i = a; i < b; i++)
#define repm(i,a,b) for (ll i = a; i >= b; i--)
#define fr first
#define sc second
#define x first
#define y second
#define mp make_pair
#define pb push_back

const ll N = 5e5+5, MOD = 1e9+7;
ll tc = 1, n, m, br[N], d, k;
string s, s1, s2, ye = "YA", no = "TIDAK";

void input(){
  cin >> n >> m >> d >> k;
}

void solve(){
  ll pr[n+5][m+5];
  ll mush[n+5][m+5];
  memset(pr,0,sizeof(pr));
  memset(mush,0,sizeof(mush));
  repp(i,1,n){
    repp(j,1,m){
      char bnk; cin >> bnk;
      if (bnk == 'S'){
        ll xa, ya, xb, yb;
        xa = max(1LL,i-d);
        ya = max(1LL,j-d);
        xb = min(n,i+d);
        yb = min(m,j+d);
        pr[xa][ya]++;
        pr[xa][yb+1]--;
        pr[xb+1][ya]--;
        pr[xb+1][yb+1]++;
      }
      else if (bnk == 'M'){
        mush[i][j] = 1;
      }
    }
  }
  ll ans = 0;
  repp(i,1,n){
    repp(j,1,m){
      pr[i][j] += pr[i-1][j]+pr[i][j-1]-pr[i-1][j-1];
      if (mush[i][j] && pr[i][j] >= k) ans++;
      cerr << pr[i][j] << " ";
    }
    cerr << endl;
  }
  cout << ans << endl;
}

int main(){
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  //cin >> tc;
  while(tc--){
    input();
    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...