제출 #934465

#제출 시각아이디문제언어결과실행 시간메모리
934465boris_mihovChorus (JOI23_chorus)C++17
40 / 100
7011 ms171988 KiB
#include <algorithm> #include <iostream> #include <numeric> #include <cassert> #include <vector> typedef long long llong; const int MAXN = 5000 + 10; const int INF = 1e9; int n, k; int h[MAXN]; int next[MAXN]; int prev[MAXN]; llong prefix[MAXN]; llong dp[MAXN][MAXN]; bool bl[MAXN][MAXN]; char s[2 * MAXN]; llong cost(int l, int r) { if (next[l] > r) { return 0; } return (next[l] - l + 1) * (l - 1) + prefix[r] - prefix[next[l]] - (r - l + 1) * (l - 1); } int f(int pos, int cnt) { if (pos == n + 1) { if (cnt == k) return 0; return INF; } if (bl[pos][cnt]) { return dp[pos][cnt]; } dp[pos][cnt] = INF; bl[pos][cnt] = true; for (int next = pos + 1 ; next <= n + 1 ; ++next) { dp[pos][cnt] = std::min(dp[pos][cnt], f(next, cnt + 1) + cost(pos, next - 1)); } return dp[pos][cnt]; } void solve() { int cntA = 0; int cntB = 0; for (int i = 1 ; i <= 2 * n ; ++i) { if (s[i] == 'B') { cntB++; } else { cntA++; h[cntA] = cntB; } } for (int i = 1 ; i <= n ; ++i) { prefix[i] = prefix[i - 1] + h[i]; } next[n + 1] = n + 1; h[n + 1] = n + 1; for (int i = n ; i >= 1 ; --i) { next[i] = next[i + 1]; while (next[i] >= i && h[next[i]] >= i) { next[i]--; } } prev[0] = 0; for (int i = 1 ; i <= n ; ++i) { prev[i] = prev[i - 1]; while (prev[i] <= i && h[prev[i]] < i) { prev[i]++; } } std::cout << f(1, 0) << '\n'; } void input() { std::cin >> n >> k; std::cin >> s + 1; } void fastIOI() { std::ios_base :: sync_with_stdio(0); std::cout.tie(nullptr); std::cin.tie(nullptr); } int main() { fastIOI(); input(); solve(); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

chorus.cpp: In function 'void input()':
chorus.cpp:101:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
  101 |     std::cin >> s + 1;
      |                 ~~^~~
#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...