# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1029824 | 2024-07-21T11:32:15 Z | Unforgettablepl | Chorus (JOI23_chorus) | C++17 | 1 ms | 348 KB |
#include <bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; struct fenwick{ vector<int> tree; int n; fenwick(int n):n(n),tree(n+1){} void add(int k,int x){ while(k<=n){ tree[k]+=x; k+=k&-k; } } int get(int k){ int ans = 0; while(k){ ans+=tree[k]; k-=k&-k; } return ans; } }; int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,k; cin >> n >> k; string s; cin >> s; s.insert(s.begin(),'$'); vector<int> posA(n+1); vector<int> posB(n+1); int cntA = 0,cntB = 0; for(int i=1;i<=2*n;i++){ if(s[i]=='A'){ posA[++cntA]=i; } else { posB[++cntB]=i; } } auto solve = [&](int penalty){ vector<pair<int,int>> DP(n+1,{INF,-INF}); DP[0]={0,0}; for(int i=1;i<=n;i++){ fenwick addedA(2*n); fenwick addedB(2*n); int ans = penalty; for(int j=i+1;j<=n;j++)addedB.add(posB[j],1); for(int j=i;j;j--){ ans+=addedA.get(2*n)-addedA.get(posB[j]); addedB.add(posB[j],1); ans+=addedB.get(posA[j]); addedA.add(posA[j],1); DP[i]=min(DP[i],{DP[j-1].first+ans,DP[j-1].second-1}); } } DP[n].second*=-1ll; return DP[n]; }; int best_penalty = -1; for(int jump=(1ll<<50);jump;jump/=2ll){ if(solve(best_penalty+jump).second>k)best_penalty+=jump; } best_penalty++; cout << solve(best_penalty).first-solve(best_penalty).second*best_penalty << '\n'; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Correct | 0 ms | 348 KB | Output is correct |
4 | Correct | 1 ms | 344 KB | Output is correct |
5 | Correct | 0 ms | 348 KB | Output is correct |
6 | Incorrect | 0 ms | 348 KB | Output isn't correct |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Correct | 0 ms | 348 KB | Output is correct |
4 | Correct | 1 ms | 344 KB | Output is correct |
5 | Correct | 0 ms | 348 KB | Output is correct |
6 | Incorrect | 0 ms | 348 KB | Output isn't correct |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Correct | 0 ms | 348 KB | Output is correct |
4 | Correct | 1 ms | 344 KB | Output is correct |
5 | Correct | 0 ms | 348 KB | Output is correct |
6 | Incorrect | 0 ms | 348 KB | Output isn't correct |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Correct | 0 ms | 348 KB | Output is correct |
4 | Correct | 1 ms | 344 KB | Output is correct |
5 | Correct | 0 ms | 348 KB | Output is correct |
6 | Incorrect | 0 ms | 348 KB | Output isn't correct |
7 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 348 KB | Output is correct |
2 | Correct | 0 ms | 348 KB | Output is correct |
3 | Correct | 0 ms | 348 KB | Output is correct |
4 | Correct | 1 ms | 344 KB | Output is correct |
5 | Correct | 0 ms | 348 KB | Output is correct |
6 | Incorrect | 0 ms | 348 KB | Output isn't correct |
7 | Halted | 0 ms | 0 KB | - |