求助,只对10%是什么原因,看好多人都是10%
查看原帖
求助,只对10%是什么原因,看好多人都是10%
245579
holy楼主2023/1/3 13:56
#include<iostream>
using namespace std;

int a[100010]; //|S|表示字符串S的长度
int b[100010]; //保存sum可能的最大值

int main()
{
    string s;
    cin>>s;
    for(int i = 0; i < s.size(); ++i)
        a[i] = s[i] - '0'; //字符转整型存入数组
    int sum = 0;
    int zero = 0, one = 0; //保存连续出现的0和1
    int flag = 0; //做标记,判断先遇到连续0
    int m = 0; //数组b下标,数组b用以保存可能的sum

    //核心代码↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
    for(int i = 0; i < s.size(); ++i) {
        if(a[i] == 0) { //遇到0
            one = 0;
            zero += 1;
            flag = 1;
        }
        if(a[i] == 1 && flag == 1) {//连续0后遇到1
            one += 1;
            b[m++] += zero; //先把当前连续0保存起来
        }
        if(one != 0 && flag == 1 && a[i + 1] == 0) { //连续0连续1再遇到0之前
            flag = 0;
            if(zero - one > 0)
                sum += (zero - one);
            if(zero - one < 0) {
                b[m++] = sum;
                sum = 0; //如果出现类似00111情况,继续连续sum会变小,所以断掉
            }
        }
        if(one >= 1 && a[i + 1] == 0) {
            zero = 0;
            one = 0;
        }
    }

    for(int i = 0; i < sizeof(b) / sizeof(b[0]); ++i) //这样求整型型数组长度
        sum = max(sum, b[i]);

    cout<<sum<<endl;

    return 0;
}
2023/1/3 13:56
加载中...