「CJOJ2723」Reserve

Description


0比1小,所以一个串中如果0全在1前面,这个串就比较和谐。对于一个只包含 0和1的串,你每次可以将一个0变成1,或者将一个1变成0。那么,最少需要变多 少次才能把保证所有的0在1前面呢?

Input


一个01串。

Output


一个数即答案。

Sample Input


010001

Sample Output


1

Hint


数据范围与约定
对于40% 的数据, \(len<=20\)
对于70% 的数据, \(len<=10^3\)
对于100%的数据,\(len<=10^5\)

题解


这道题目真的简单,我们只要一位一位从后往前加‘1’,然后小小的判断就可以了!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
#define re register
#define ll long long
using namespace std;

inline int gi(){
    int sum=0,f=1;char ch=getchar();
    while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
    return f*sum;
}
const int maxl=100010,Inf=1000000000+10;
char s[maxl],a[maxl];
int main(){
    int i,j,k,n,m;
    scanf("%s",s);
    int len=strlen(s),ans=Inf;
    for(i=0;i<len;i++)
        a[i]='0';
    int cnt=0;
    for(i=0;i<len;i++)
        if(s[i]=='1')cnt++;
    if(!cnt)ans=0;
    for(i=len-1;i>=0;i--){
        a[i]='1';
        if(s[i]=='1')cnt--;
        else cnt++;
        ans=min(ans,cnt);
    }
    printf("%d\n",ans);
    return 0;
}

转载于:https://www.cnblogs.com/cjgjh/p/9371587.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>