传送门

 

参考资料:

  [1]:官方题解(提取码:rkcq)

  [2]:标程(提取码:0tiq)

 

B.Crazy Binary String(前缀和)

•题意

  给你一个只包含 0,1 的串 s;

  求满足 0 与 1 的个数相同的子串和子序列;

  输出这两个串的最大长度;

•题解

  求解满足条件的最大子串长度类似于这道题:????

  而最大子序列就是 2×min(0的个数,1的个数);

•Code

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define GCD(a,b) __gcd(a,b)
 4 #define ll long long
 5 const int maxn=1e5+50;
 6 
 7 int n;
 8 char s[maxn];
 9 int a[maxn];
10 int b[maxn];
11 map<int ,int >f;
12 
13 void Solve()
14 {
15     f.clear();
16     a[0]=b[0]=0;
17     f[0]=0;
18 
19     int zero=0;
20     int one=0;
21     int len=strlen(s+1);
22     for(int i=1;i <= len;i++)
23     {
24         if(s[i] == '1')
25             one++;
26         else
27             zero++;
28         a[i]=a[i-1]+(s[i] == '1');
29         b[i]=b[i-1]+(s[i] == '0');
30     }
31 
32     int ans=0;
33     for(int i=1;i <= len;++i)
34     {
35         int cur=a[i]-b[i];
36         if(f.count(cur))
37             ans=max(ans,i-f[cur]);
38         else
39             f[cur]=i;
40     }
41     printf("%d %d\n",ans,min(one,zero)*2);
42 }
43 int main()
44 {
45     scanf("%d",&n);
46     scanf("%s",s+1);
47     Solve();
48 
49     return 0;
50 }
View Code

相关文章:

  • 2021-10-27
  • 2022-03-07
  • 2021-08-05
  • 2021-10-29
猜你喜欢
  • 2022-02-09
  • 2021-08-03
  • 2021-12-15
  • 2021-08-31
相关资源
相似解决方案