#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
template < class T> struct cLtraits_identity{
using type = T;
}
;
template < class T> using cLtraits_try_make_signed =
typename conditional<
is_integral< T> :: value ,
make_signed< T> ,
cLtraits_identity< T>
> :: type ;
template < class S, class T> struct cLtraits_common_type{
using tS = typename cLtraits_try_make_signed< S> :: type ;
using tT = typename cLtraits_try_make_signed< T> :: type ;
using type = typename common_type< tS,tT> :: type ;
}
;
template < class S, class T> inline auto min_L( S a, T b)
- > typename cLtraits_common_type< S,T> :: type {
return ( typename cLtraits_common_type< S,T> :: type ) a <= ( typename cLtraits_common_type< S,T> :: type ) b ? a : b;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int dp1[ 100000 + 2 ] ;
int dp2[ 100000 + 2 ] ;
class Solution{
public :
int minFlips( string s) {
int i;
int res = 1073709056 ;
int N = s.size ( ) ;
dp1[ 0 ] = dp2[ 0 ] = 0 ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( s[ i] - '0' == i% 2 ) {
dp1[ i+ 1 ] = dp1[ i] + 1 ;
}
else {
dp1[ i+ 1 ] = dp1[ i] + 0 ;
}
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
if ( s[ N- 1 - i] - '0' == ( i+ 1 ) % 2 ) {
dp2[ i+ 1 ] = dp2[ i] + 1 ;
}
else {
dp2[ i+ 1 ] = dp2[ i] + 0 ;
}
}
int cTE1_r3A;
remove_reference< decltype( dp1[ cTE1_r3A] + dp2[ N- cTE1_r3A] ) > :: type RZTsC2BF;
int FmcKpFmN = 0 ;
if ( ( 0 ) > ( ( N+ 1 ) - 1 ) ) {
RZTsC2BF = numeric_limits< remove_reference< decltype( dp1[ cTE1_r3A] + dp2[ N- cTE1_r3A] ) > :: type > :: max ( ) ;
}
else {
for ( cTE1_r3A = 0 ; cTE1_r3A <= ( N+ 1 ) - 1 ; cTE1_r3A++ ) {
if ( FmcKpFmN == 0 ) {
RZTsC2BF = min_L( dp1[ cTE1_r3A] + dp2[ N- cTE1_r3A] , N- ( dp1[ cTE1_r3A] + dp2[ N- cTE1_r3A] ) ) ;
FmcKpFmN = 1 ;
continue ;
}
const auto WYIGIcGE = min_L( dp1[ cTE1_r3A] + dp2[ N- cTE1_r3A] , N- ( dp1[ cTE1_r3A] + dp2[ N- cTE1_r3A] ) ) ;
if ( RZTsC2BF > WYIGIcGE) {
RZTsC2BF = WYIGIcGE;
}
}
}
return RZTsC2BF;
}
}
;
// cLay version 20210607-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int dp1[1d5+2], dp2[];
//
// class Solution {
// public:
// int minFlips(string s) {
// int res = int_inf, N = s.size();
// dp1[0] = dp2[0] = 0;
// rep(i,N) dp1[i+1] = dp1[i] + if[s[i]-'0'==i%2, 1, 0];
// rep(i,N) dp2[i+1] = dp2[i] + if[s[N-1-i]-'0'==(i+1)%2, 1, 0];
// return min[i,0,N+1](min(dp1[i]+dp2[N-i], N-(dp1[i]+dp2[N-i])));
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgY0x0cmFpdHNfaWRlbnRpdHl7CiAgdXNpbmcgdHlwZSA9IFQ7Cn0KOwp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBjTHRyYWl0c190cnlfbWFrZV9zaWduZWQgPQogIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAogICAgaXNfaW50ZWdyYWw8VD46OnZhbHVlLAogICAgbWFrZV9zaWduZWQ8VD4sCiAgICBjTHRyYWl0c19pZGVudGl0eTxUPgogICAgPjo6dHlwZTsKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQ+IHN0cnVjdCBjTHRyYWl0c19jb21tb25fdHlwZXsKICB1c2luZyB0UyA9IHR5cGVuYW1lIGNMdHJhaXRzX3RyeV9tYWtlX3NpZ25lZDxTPjo6dHlwZTsKICB1c2luZyB0VCA9IHR5cGVuYW1lIGNMdHJhaXRzX3RyeV9tYWtlX3NpZ25lZDxUPjo6dHlwZTsKICB1c2luZyB0eXBlID0gdHlwZW5hbWUgY29tbW9uX3R5cGU8dFMsdFQ+Ojp0eXBlOwp9CjsKdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIGF1dG8gbWluX0woUyBhLCBUIGIpCi0+IHR5cGVuYW1lIGNMdHJhaXRzX2NvbW1vbl90eXBlPFMsVD46OnR5cGV7CiAgcmV0dXJuICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBhIDw9ICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBiID8gYSA6IGI7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgZHAxWzEwMDAwMCsyXTsKaW50IGRwMlsxMDAwMDArMl07CmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgbWluRmxpcHMoc3RyaW5nIHMpewogICAgaW50IGk7CiAgICBpbnQgcmVzID0gMTA3MzcwOTA1NjsKICAgIGludCBOID0gcy5zaXplKCk7CiAgICBkcDFbMF0gPSBkcDJbMF0gPSAwOwogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGlmKHNbaV0tJzAnPT1pJTIpewogICAgICAgIGRwMVtpKzFdID0gZHAxW2ldICsxOwogICAgICB9CiAgICAgIGVsc2V7CiAgICAgICAgZHAxW2krMV0gPSBkcDFbaV0gKzA7CiAgICAgIH0KICAgIH0KICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBpZihzW04tMS1pXS0nMCc9PShpKzEpJTIpewogICAgICAgIGRwMltpKzFdID0gZHAyW2ldICsxOwogICAgICB9CiAgICAgIGVsc2V7CiAgICAgICAgZHAyW2krMV0gPSBkcDJbaV0gKzA7CiAgICAgIH0KICAgIH0KICAgIGludCBjVEUxX3IzQTsKICAgIHJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoZHAxW2NURTFfcjNBXStkcDJbTi1jVEUxX3IzQV0pPjo6dHlwZSBSWlRzQzJCRjsKICAgIGludCBGbWNLcEZtTiA9IDA7CiAgICBpZigoMCkgPiAoKE4rMSktMSkpewogICAgICBSWlRzQzJCRiA9IG51bWVyaWNfbGltaXRzPHJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoZHAxW2NURTFfcjNBXStkcDJbTi1jVEUxX3IzQV0pPjo6dHlwZT46Om1heCgpOwogICAgfQogICAgZWxzZXsKICAgICAgZm9yKGNURTFfcjNBID0gMDsgY1RFMV9yM0EgPD0gKE4rMSktMTsgY1RFMV9yM0ErKyl7CiAgICAgICAgaWYoRm1jS3BGbU4gPT0gMCl7CiAgICAgICAgICBSWlRzQzJCRiA9bWluX0woZHAxW2NURTFfcjNBXStkcDJbTi1jVEUxX3IzQV0sIE4tKGRwMVtjVEUxX3IzQV0rZHAyW04tY1RFMV9yM0FdKSk7CiAgICAgICAgICBGbWNLcEZtTiA9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgYXV0byBXWUlHSWNHRSA9bWluX0woZHAxW2NURTFfcjNBXStkcDJbTi1jVEUxX3IzQV0sIE4tKGRwMVtjVEUxX3IzQV0rZHAyW04tY1RFMV9yM0FdKSk7CiAgICAgICAgaWYoUlpUc0MyQkYgPiBXWUlHSWNHRSl7CiAgICAgICAgICBSWlRzQzJCRiA9IFdZSUdJY0dFOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIFJaVHNDMkJGOwogIH0KfQo7Ci8vIGNMYXkgdmVyc2lvbiAyMDIxMDYwNy0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBkcDFbMWQ1KzJdLCBkcDJbXTsKLy8gCi8vIGNsYXNzIFNvbHV0aW9uIHsKLy8gcHVibGljOgovLyAgIGludCBtaW5GbGlwcyhzdHJpbmcgcykgewovLyAgICAgaW50IHJlcyA9IGludF9pbmYsIE4gPSBzLnNpemUoKTsKLy8gICAgIGRwMVswXSA9IGRwMlswXSA9IDA7Ci8vICAgICByZXAoaSxOKSBkcDFbaSsxXSA9IGRwMVtpXSArIGlmW3NbaV0tJzAnPT1pJTIsIDEsIDBdOwovLyAgICAgcmVwKGksTikgZHAyW2krMV0gPSBkcDJbaV0gKyBpZltzW04tMS1pXS0nMCc9PShpKzEpJTIsIDEsIDBdOwovLyAgICAgcmV0dXJuIG1pbltpLDAsTisxXShtaW4oZHAxW2ldK2RwMltOLWldLCBOLShkcDFbaV0rZHAyW04taV0pKSk7Ci8vICAgfQovLyB9Owo=