Submission #704505

#TimeUsernameProblemLanguageResultExecution timeMemory
704505PenguinsAreCuteGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++17
15 / 100
1 ms304 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define SREP(i, a, b) for(ll i = a; i < b; i++) #define NREP(i, a, b) for(ll i = a; i <= b; i++) int main() { ll N, R = 0, Y = 0, G = 0; string S; cin >> N >> S; vector<ll> Rpos, Ypos, Gpos; SREP(i, 0, N) { if(S[i] == 'R') { Rpos.push_back(i); R++; } else if(S[i] == 'Y') { Ypos.push_back(i); Y++; } else { Gpos.push_back(i); G++; } } ll dp[2][Y + 1][G + 1][3]; SREP(i, 0, 2) NREP(j, 0, Y) NREP(k, 0, G) SREP(l, 0, 3) dp[i][j][k][l] = 1e18; SREP(i, 0, 3) dp[0][0][0][i] = 0; NREP(i, 0, R) NREP(j, 0, Y) NREP(k, 0, G) { if(i + j + k == 0) continue; dp[i % 2][j][k][0] = 1e18; dp[i % 2][j][k][1] = 1e18; dp[i % 2][j][k][2] = 1e18; if(i != 0) dp[i % 2][j][k][0] = min(dp[(i - 1) % 2][j][k][1], dp[(i - 1) % 2][j][k][2]) + abs(Rpos[i - 1] - (i + j + k - 1)); if(j != 0) dp[i % 2][j][k][1] = min(dp[i % 2][j - 1][k][0], dp[i % 2][j - 1][k][2]) + abs(Ypos[j - 1] - (i + j + k - 1)); if(k != 0) dp[i % 2][j][k][2] = min(dp[i % 2][j][k - 1][0], dp[i % 2][j][k - 1][1]) + abs(Gpos[k - 1] - (i + j + k - 1)); } ll ans = LONG_LONG_MAX; SREP(i, 0, 3) ans = min(ans, dp[R % 2][Y][G][i]); if(ans >= 1e12) cout << -1; else cout << ans / 2; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...