Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int minimumBeating(int N, string S){
- vector<int> pref1(N);
- vector<int> pref0(N);
- int sum0 =0;
- int sum1 =0;
- for(int i=0;i<N;i++){
- if(S[i]=='1'){
- sum1++;
- }
- else{
- sum0++;
- }
- pref1[i] = sum1;
- pref0[i] = sum0;
- }
- int ans = min(pref0[N-1],pref1[N-1]);
- for(int i=N;i>=1;i--){
- int start =0;
- int end = i-2;
- int rem = pref0[i-1];
- int sides = pref1[N-1]-pref1[i-1];
- ans = min(ans,max(rem,sides));
- while(start<end){
- int mid = (start+end)/2;
- int temprem = pref0[i-1]-pref0[mid+1]+(S[mid+1]=='0');
- int tempsides = pref1[N-1] - (pref1[i-1]-pref1[mid+1]+(S[mid+1]=='1'));
- if(temprem>tempsides){
- start =mid+1;
- }
- else{
- end = mid;
- }
- }
- rem = pref0[i-1]-pref0[start+1]+(S[start+1]=='0');
- sides = pref1[N-1] - (pref1[i-1]-pref1[start+1]+(S[start+1]=='1'));
- ans = min(ans,max(rem,sides));
- }
- return ans;
- }
- signed main() {
- int N;
- cin>>N;
- string S;
- cin>>S;
- cout<<minimumBeating(N,S)<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment