Submission #572696

#TimeUsernameProblemLanguageResultExecution timeMemory
572696DevigoCollecting Mushrooms (NOI18_collectmushrooms)C++14
79 / 100
2066 ms5460 KiB
#include <bits/stdc++.h>
using namespace std;

#define pb push_back
#define mp make_pair

const int siz = 0;
const int mod = 0;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int r, c, d, k;
	cin >> r >> c >> d >> k;
	vector<string> v(r);
	for(int i=0; i<r; i++) {
		cin >> v[i];
	}
	if(r == 1) {
		vector<int> ps(c+1,0);
		for(int i=1; i<=c; i++) {
			ps[i] = ps[i-1];
			if(v[0][i-1] == 'S') ps[i]++;
		}
		//for(int i=0; i<=c; i++) {
		//	cout << ps[i] << " ";
		//}
		cout << endl;
		int cnt = 0;
		for(int i=0; i<c; i++) {
			if(v[0][i] == 'M') {
				int mi = max(1,(i+1-d));
				int ma = min(c,(i+1+d));
				int cn = (ps[i]-ps[mi-1]) + (ps[ma]-ps[i]);
				if(cn >= k) cnt++;
			}
		}
		cout << cnt << "\n"; return 0;
	}
	//for(int i=0; i<r; i++) {
	//	for(int j=0; j<c; j++) {
	//		cout << v[i][j] << " ";
	//	}
	//	cout << "\n";
	//}
	vector<vector<int>> cnt(r,vector<int>(c,0));
	for(int i=0; i<r; i++) {
		for(int j=0; j<c; j++) {
			if(v[i][j] == 'S') {
				int x,y,z,e; //cout << "c\n";
				x = max(0,i-d);
				y = max(0,j-d);
				z = min(r-1,i+d);
				e = min(c-1,j+d);
				for(int sp=x; sp<=z; sp++) {
					for(int ep=y; ep<=e; ep++) {
						cnt[sp][ep]++;
					}
				}
			}
		}
	}
	//for(int i=0; i<r; i++) {
	//	for(int j=0; j<c; j++) {
	//		cout << cnt[i][j] << " ";
	//	}
	//	cout << endl;
	//}
	int cn = 0;
	for(int i=0; i<r; i++) {
		for(int j=0; j<c; j++) {
			if(v[i][j] == 'M' && cnt[i][j] >= k) cn++;
		}
	}
	cout << cn << "\n";
	return 0;
}
#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...