Submission #1271534

#TimeUsernameProblemLanguageResultExecution timeMemory
1271534yeulerCollecting Mushrooms (NOI18_collectmushrooms)C++20
56 / 100
2093 ms6120 KiB
#include <bits/stdc++.h> #define ll long long #define KAGAMINE ios_base::sync_with_stdio(false); #define LEN cin.tie(NULL); #define slv solve(); #define slve int tc = 1; cin >> tc; while(tc--){solve();} #define pls cout << "mantap\n"; #define fi first #define se second #define all(x) x.begin(), x.end() #define pb push_back #define vector2d(x) vector<vector<x>> #define pii pair<int, int> #define pl pair<ll, ll> using namespace std; int r, c, d, k; vector<pii> mus, spr; void sub5(){ vector<int> kor; for (int i = 0; i < spr.size(); i++){ kor.pb(spr[i].se); } sort(all(kor)); // for (auto x : kor) cout << x << " "; // cout << "\n"; int ans = 0; for (int i = 0; i < mus.size(); i++){ int rn = mus[i].se; auto lb = lower_bound(all(kor),rn-d), ub = upper_bound(all(kor), rn+d); int cnt = ub-lb; // cout << ka << " " << ki << "\n"; if (cnt >= k) ans++; } cout << ans; } int R[8] = {0, 0, 1, -1, 1, -1, -1, 1}, C[8] = {1, -1, 0, 0, 1, -1, 1, -1}; void sub4(){ vector2d(int) jrk(501, vector<int>(501, -1)); vector2d(int) srm(501, vector<int>(501, 0)); for (int i = 0; i < spr.size(); i++){ queue<pii> q; vector<pii> vis; vis.pb({spr[i].fi, spr[i].se}); q.push({spr[i].fi, spr[i].se}); jrk[spr[i].fi][spr[i].se] = 0; while(!q.empty()){ pii rn = q.front(); q.pop(); if (jrk[rn.fi][rn.se] >= d) continue; for (int i = 0; i < 8; i++){ int rnr = rn.fi+R[i], rnc = rn.se+C[i]; if (rnr < 0 || rnr >= r || rnc < 0 || rnc >= c) continue; if (jrk[rnr][rnc] == -1){ jrk[rnr][rnc] = jrk[rn.fi][rn.se]+1; srm[rnr][rnc] += 1; q.push({rnr,rnc}); vis.pb({rnr,rnc}); } } } for (auto [x,y] : vis){ jrk[x][y] = -1; } } int ans = 0; for (auto [x,y] : mus){ if (srm[x][y] >= k) ans++; } cout << ans; } int main(){ KAGAMINE LEN cin >> r >> c >> d >> k; for (int i = 0; i < r; i++){ for (int j = 0; j < c; j++){ char tmp; cin >> tmp; if (tmp == 'S') spr.pb({i,j}); if (tmp == 'M') mus.pb({i,j}); } } if (d == max(r,c) && k == 1){ // subtsk 1 cout << mus.size(); return 0; } if (d == max(r,c)){ // subtsk 2 if (spr.size() >= k){ cout << mus.size(); } else { cout << 0; } return 0; } if (r == 1){ sub5(); return 0; } sub4(); 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...