ACM模版

描述

题解

水题一道,将前i个字符中01的个数分别存一下,最后对比即可。

代码

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int MAXN = 1e6 + 10;

char S[MAXN];
int S_0[MAXN];
int S_1[MAXN];

int main(int argc, const char * argv[])
{
    scanf("%s", S + 1);
    int len = (int)strlen(S + 1);
    for (int i = 1; i <= len; i++)
    {
        if (S[i] == '0')
        {
            S_0[i] = S_0[i - 1] + 1;
            S_1[i] = S_1[i - 1];
        }
        else
        {
            S_0[i] = S_0[i - 1];
            S_1[i] = S_1[i - 1] + 1;
        }
    }

    int k = -1;
    if (S_1[len] == 0)
    {
        k = 0;
    }
    else if (S_0[len] == 0)
    {
        k = len;
    }
    else
    {
        for (int i = 1; i < len; i++)
        {
            if (S_0[i] - S_0[0] == S_1[len] - S_1[i])
            {
                k = i;
                break;
            }
        }
    }

    cout << k << '\n';

    return 0;
}

参考

51Nod 1393 0和1相等串