제출 #1280632

#제출 시각아이디문제언어결과실행 시간메모리
1280632historikCollecting Mushrooms (NOI18_collectmushrooms)C++20
60 / 100
978 ms10516 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, d, k; cin >> n >> m >> d >> k; vector<vector<char> > v(n, vector<char> (m)); vector<int> pr(m + 1, 0); vector<pair<int, int> > sp, ma; for(int i = 0;i < n;i++) { for(int j = 0;j < m;j++) { if(j > 0) pr[j] = pr[j - 1]; cin >> v[i][j]; if(v[i][j] == 'M') { ma.push_back({i, j}); } if(v[i][j] == 'S') { sp.push_back({i, j}); pr[j]++; } } } if(n == 1) { int cnt = 0; vector<int> mp(n + 1, 0); for(int i = 0;i < ma.size();i++) { int q = min(ma[i].second - d - 1, (int)0); int q1 = min(ma[i].second + d + 1, (int)m - 1); int qq = pr[q1] - pr[q]; if(qq >= k) cnt++; } cout << cnt; return 0; } int cnt = 0; map<pair<int, int>, int> mp; for(int i = 0;i < sp.size();i++) { for(int j = 0;j < ma.size();j++) { int q = max(abs(sp[i].first - ma[j].first), abs(sp[i].second - ma[j].second)); if(q <= d) { mp[{ma[j].first, ma[j].second}]++; if(mp[{ma[j].first, ma[j].second}] == k) cnt++; } } } cout << cnt; } /* 1 2 3 4 1 2 4 3 1 3 2 4 1 3 4 2 1 4 2 3 1 4 3 2 2 3 4 1 2 4 3 1 1 2 3 4 5 1 2 3 5 4 1 2 4 3 5 1 2 4 5 3 1 2 5 3 4 1 2 5 4 3 1 3 2 4 5 1 3 2 5 4 1 3 4 2 5 1 3 4 5 2 1 3 5 2 4 1 3 5 4 2 1 4 */
#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...