Submission #411770

#TimeUsernameProblemLanguageResultExecution timeMemory
411770nichkeGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++14
100 / 100
228 ms385772 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define endl '\n' int n; string s; const int INF = 1e9 + 9; int cnt[3]; int pos[3][405]; int pref[3][405]; int a[405]; int dp[3][405][405][405]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> s; for (int i = 0; i < s.size(); i++) { if (s[i] == 'R') { a[i + 1] = 0; cnt[0]++; pos[0][cnt[0]] = i + 1; } else if (s[i] == 'G') { a[i + 1] = 1; cnt[1]++; pos[1][cnt[1]] = i + 1; } else { a[i + 1] = 2; cnt[2]++; pos[2][cnt[2]] = i + 1; } } for (int i = 0; i < 3; i++) { for (int j = 1; j <= n; j++) { pref[i][j] = pref[i][j - 1]; if (a[j] == i) pref[i][j]++; } } for (int i = 0; i < 3; i++) { for (int r = 0; r <= cnt[0]; r++) { for (int g = 0; g <= cnt[1]; g++) { for (int y = 0; y <= cnt[2]; y++) { dp[i][r][g][y] = INF; } } } } dp[0][0][0][0] = 0; dp[1][0][0][0] = 0; dp[2][0][0][0] = 0; for (int r = 0; r <= cnt[0]; r++) { for (int g = 0; g <= cnt[1]; g++) { for (int y = 0; y <= cnt[2]; y++) { for (int pre = 0; pre < 3; pre++) { for (int cur = 0; cur < 3; cur++) { if (cur == pre) continue; if ((cur == 0 && r == cnt[0])) continue; if ((cur == 1 && g == cnt[1])) continue; if ((cur == 2 && y == cnt[2])) continue; int ans = 0; int p1, p2, p3, dif; if (pre == 0) { p1 = pos[0][r]; if (cur == 1) { p2 = pos[1][g + 1]; p3 = pos[2][y]; dif = 2; } else { p2 = pos[2][y + 1]; p3 = pos[1][g]; dif = 1; } } else if (pre == 1) { p1 = pos[1][g]; if (cur == 0) { p2 = pos[0][r + 1]; p3 = pos[2][y]; dif = 2; } else { p2 = pos[2][y + 1]; p3 = pos[0][r]; dif = 0; } } else { p1 = pos[2][y]; if (cur == 0) { p2 = pos[0][r + 1]; p3 = pos[1][g]; dif = 1; } else { p2 = pos[1][g + 1]; p3 = pos[0][r]; dif = 0; } } ans += max(0LL, pref[pre][p2] - pref[pre][p1]); ans += max(0LL, pref[dif][p2] - pref[dif][p3]); ans += dp[pre][r][g][y]; if (cur == 0) { dp[cur][r + 1][g][y] = min(dp[cur][r + 1][g][y], ans); } else if (cur == 1) { dp[cur][r][g + 1][y] = min(dp[cur][r][g + 1][y], ans); } else { dp[cur][r][g][y + 1] = min(dp[cur][r][g][y + 1], ans); } } } } } } int ans = INF; for (int i = 0; i < 3; i++) { ans = min(ans, dp[i][cnt[0]][cnt[1]][cnt[2]]); } if (ans == INF) { cout << -1 << '\n'; } else { cout << ans << '\n'; } return 0; }

Compilation message (stderr)

joi2019_ho_t3.cpp: In function 'int main()':
joi2019_ho_t3.cpp:22:20: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |  for (int i = 0; i < s.size(); i++) {
      |                  ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...