cf 873 Balanced Substring

来源:互联网 发布:mac如何打拼音声调 编辑:程序博客网 时间:2024/06/07 20:00

一开始用前缀数组做,一看超时,后来用前缀和怎么也写不对,真菜啊,
在网上看大神的题解,学到了map标记的方法,但是还没想明白这个题是怎么回事
先付上代码
地址 http://blog.csdn.net/WYK1823376647/article/details/78221033

#include<map>#include<cstdio>#include<iostream>const int M = 100010;using namespace std;int a[M];int main(){    map<int,int> m;    int ans = 0,sum;    char c;    int n;    cin >> n;    for(int  i = 1;i <= n; ++i)    {        cin >> c;        if(c == '1')            a[i] = 1;        else            a[i] = -1;a    }    sum = 0;    m[0] = 1;//用来判"10或01开头的情况"    for(int i = 1; i <= n; ++i)    {        sum += a[i];        if(m[sum])        {            ans = max(ans, i - m[sum] + 1);        }        else        {            m[sum] = i + 1;        }    }    cout << ans << endl;}