Samkit5025

Untitled

Aug 29th, 2022
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int minimumBeating(int N, string S){
  5.    
  6.     vector<int> pref1(N);
  7.     vector<int> pref0(N);
  8.     int sum0 =0;
  9.     int sum1 =0;
  10.  
  11.     for(int i=0;i<N;i++){
  12.         if(S[i]=='1'){
  13.             sum1++;
  14.         }
  15.         else{
  16.             sum0++;
  17.         }
  18.         pref1[i] = sum1;
  19.         pref0[i] = sum0;
  20.     }
  21.  
  22.     int ans = min(pref0[N-1],pref1[N-1]);
  23.  
  24.     for(int i=N;i>=1;i--){
  25.  
  26.         int start =0;
  27.         int end = i-2;
  28.         int rem = pref0[i-1];
  29.         int sides = pref1[N-1]-pref1[i-1];
  30.  
  31.         ans = min(ans,max(rem,sides));
  32.    
  33.         while(start<end){
  34.             int mid = (start+end)/2;
  35.             int temprem = pref0[i-1]-pref0[mid+1]+(S[mid+1]=='0');
  36.             int tempsides = pref1[N-1] - (pref1[i-1]-pref1[mid+1]+(S[mid+1]=='1'));
  37.  
  38.             if(temprem>tempsides){
  39.                 start =mid+1;
  40.             }
  41.             else{
  42.                 end = mid;
  43.             }  
  44.         }
  45.         rem = pref0[i-1]-pref0[start+1]+(S[start+1]=='0');
  46.         sides = pref1[N-1] - (pref1[i-1]-pref1[start+1]+(S[start+1]=='1'));
  47.         ans = min(ans,max(rem,sides));
  48.     }
  49.  
  50.     return ans;
  51. }
  52.  
  53.  
  54. signed main() {
  55.     int N;
  56.     cin>>N;
  57.     string S;
  58.     cin>>S;
  59.    
  60.     cout<<minimumBeating(N,S)<<endl;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment