#include <bits/stdc++.h>
using namespace std;
#define int long long
int d1[4]={0,0,1,-1};
int d2[4]={1,-1,0,0};
int32_t main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n,m,d,k;
cin>>n>>m>>d>>k;
map<pair<int,int>, int>wet;
vector<pair<int,int>>sprinkler, mush;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
char x;
cin>>x;
if(x=='S')sprinkler.push_back({i,j});
if(x=='M')mush.push_back({i,j});
}
}if(min(n, m)<=500){
if(n<m){
vector<pair<int,int>>intervals[n+2];
for(auto e:sprinkler){
for(int i=max(e.first-d, 1LL); i<=min(e.first+d,n); i++){
intervals[i].push_back({max(e.second-d, 1LL), min(e.second+d, m)});
}
}//sort(intervals.begin(), intervals.end());
int cnt=0;
vector<vector<int>>p(n+2,vector<int>(m+2, 0)), pref(n+2,vector<int>(m+2, 0));
for(int i=1; i<=n; i++){
for(auto e: intervals[i]){
p[i][e.first]++;
p[i][e.second+1]--;
}
}for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
pref[i][j]=pref[i][j-1]+p[i][j];
}
}for(auto e: mush){
if(pref[e.first][e.second]>=k)cnt++;
}cout<<cnt<<endl;
}else{
vector<pair<int,int>>intervals[m+2];
for(auto e:sprinkler){
for(int i=max(e.second-d, 1LL); i<=min(e.second+d,m); i++){
intervals[i].push_back({max(e.first-d, 1LL), min(e.first+d, n)});
}
}//sort(intervals.begin(), intervals.end());
int cnt=0;
vector<vector<int>>p(m+2,vector<int>(n+2, 0)), pref(m+2,vector<int>(n+2, 0));
for(int i=1; i<=m; i++){
for(auto e: intervals[i]){
p[i][e.first]++;
p[i][e.second+1]--;
}
}for(int i=1; i<=m; i++){
for(int j=1; j<=n; j++){
pref[i][j]=pref[i][j-1]+p[i][j];
}
}for(auto e: mush){
if(pref[e.second][e.first]>=k)cnt++;
}cout<<cnt<<endl;
}
}else {
for(auto e: mush){
for(auto f: sprinkler){
if(max(abs(e.first-f.first), abs(e.second-f.second))<=d){
wet[e]++;
}
}
}
int cnt=0;
for(auto e: mush){
//cout<<wet[e.first][e.second]<<endl;
if(wet[e]>=k)cnt++;
}cout<<cnt<<endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |