Submission #950481

#TimeUsernameProblemLanguageResultExecution timeMemory
950481andrei_boacaChorus (JOI23_chorus)C++17
40 / 100
7018 ms59964 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll INF=1e17; ll n,k,lga,lgb,makegood; ll A[1000005],B[1000005]; ll dp[5005][5005]; string str; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>k; cin>>str; for(int i=0;i<str.size();i++) { if(str[i]=='A') A[++lga]=i+1; else B[++lgb]=i+1; } for(int i=1;i<=n;i++) if(A[i]>B[i]) { ll x=A[i]; A[i]=B[i]; for(int j=i;j<=n;j++) { if(B[j]<x) { B[j]++; makegood++; } else break; } } for(int i=n;i>=1;i--) { dp[i][0]=INF; for(int cnt=1;cnt<=k;cnt++) { ll suma=0; ll cost=0; int ind=i; dp[i][cnt]=dp[i+1][cnt-1]; for(int j=i+1;j<=n;j++) { while(ind<=n&&B[ind]<A[j]) { suma++; ind++; } cost+=suma; dp[i][cnt]=min(dp[i][cnt],cost+dp[j+1][cnt-1]); } } } cout<<dp[1][k]+makegood; return 0; }

Compilation message (stderr)

chorus.cpp: In function 'int main()':
chorus.cpp:16:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for(int i=0;i<str.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...
#Verdict Execution timeMemoryGrader output
Fetching results...