Submission #1316698

#TimeUsernameProblemLanguageResultExecution timeMemory
1316698jahongirChorus (JOI23_chorus)C++20
61 / 100
600 ms1460 KiB
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> using namespace std; #define pb push_back #define all(a) a.begin(),a.end() typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef unsigned long long ull; typedef vector<int> vi; const int mxn = 5000; vector<int> A(1,0), B(1,0); int n; ll dp[2*mxn+1]; int cnt[2*mxn+1]; pair<ll,ll> get(ll lambda){ fill(dp,dp+2*n+1,1e18); dp[0] = 0, cnt[0] = 0; for(int j = 0; j < 2*n; j+=2){ ll sum = dp[j]+lambda; for(int l = 1; j + 2*l <= 2*n; l++){ sum += max(0,A[l+j/2]-l-j); if(dp[j+2*l] > sum){ dp[j+2*l] = sum; cnt[j+2*l] = cnt[j]+1; }else if(dp[j+2*l] == sum){ cnt[j+2*l] = min(cnt[j+2*l],cnt[j]+1); } } } return {dp[2*n],cnt[2*n]}; } void solve(){ int k; cin >> n >> k; for(int i = 1; i <= 2*n; i++){ char c; cin >> c; if(c=='A') A.emplace_back(i); else B.emplace_back(i); } ll l = -1, r = 1e15; while(l+1 < r){ ll mid = (l+r)>>1; auto [ans,res] = get(mid); if(res <= k) r = mid; else l = mid; } auto [ans,res] = get(r); cout << ans - r*k; } signed main(){ cin.tie(0)->sync_with_stdio(0); int t = 1; // cin >> t; while(t--){solve();} }
#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...