Codeforces Round #646 (Div. 2)--B. Subsequence Hate(1400分 思维+前缀和)

简介: 算法

16.png

题意:

如果一个字符串不包含 "010 "或 "101 "的子序列,则称为好字符串–例如,"1001 "包含 "101 "的子序列,因此它不是一个好字符串,而 "1000 "既不包含 "010 "也不包含 "101 "的子序列,所以它是一个好字符串。


那么,他最少要进行多少次操作才能使该字符串成为好字符串?可以证明,通过这些操作,我们可以使任何字符串变得良好。


思路:

010和101作为子串的情况都不能出现,那么母串出现0紧接着1的时候之后就不能出现0了,所以母串可能是00111or1110or1101,当然第三种情况会被视为101,所以也不能出现,所以答案串有几种情况:①:0000000,②000111,③111111,④111000,计算答案的时候可以把0开头和1开头分两种情况~计算答案的时候还有小细节我的处理是:

利用前缀和对于前面两种情况枚举边界的位置,答案数就是之后的0+之前的1和之前的1+之后的0取min~

#include<bits/stdc++.h>
using namespace std;
char s1[1005];
int sum0[1005],sum1[1005];
int main()
{
    int n,i,j,t;
    cin>>t;
    while(t--)
    {
        cin>>(s1+1);s1[0]='x';
        sum0[0]=0,sum1[0]=0;
        for(i=1;i<strlen(s1);i++) //0开头的情况
        {
            if(s1[i]=='0')
                sum0[i]=sum0[i-1]+1,sum1[i]=sum1[i-1];
            else
                sum1[i]=sum1[i-1]+1,sum0[i]=sum0[i-1];
        }
        int d1=strlen(s1)-1;
        int ans=0x3f3f3f3f;
        for(i=1;i<strlen(s1);i++)
        {
            ans=min({ans,((sum0[d1]-sum0[i])+(sum1[i-1])),(sum0[i-1]+sum1[d1]-sum1[i])});
        }
        ans=min({ans,d1-sum0[i-1],d1-sum1[i-1]});
        cout<<ans<<endl;
    }
    return 0;
}
相关文章
|
7月前
|
机器学习/深度学习 人工智能 BI
The Great Hero(Codeforces Round #700 (Div. 2))模拟+贪心思想和排序
The Great Hero(Codeforces Round #700 (Div. 2))模拟+贪心思想和排序
33 0
|
机器学习/深度学习
Codeforces1499——C. Minimum Grid Path(思维+分奇偶+贪心)
Codeforces1499——C. Minimum Grid Path(思维+分奇偶+贪心)
65 0
|
Java Shell
Codeforces Round #746 (Div. 2) D - Hemose in ICPC ?(交互 二分 欧拉序)
Codeforces Round #746 (Div. 2) D - Hemose in ICPC ?(交互 二分 欧拉序)
135 0
Codeforces Round #746 (Div. 2) C - Bakry and Partitioning(dfs 异或技巧 思维)
Codeforces Round #746 (Div. 2) C - Bakry and Partitioning(dfs 异或技巧 思维)
76 0
|
机器学习/深度学习 Java
Codeforces Round #748 (Div. 3) D2. Half of Same(数学 枚举 思维)
Codeforces Round #748 (Div. 3) D2. Half of Same(数学 枚举 思维)
82 0
CodeForces - 1312D Count the Arrays(思维+组合数学)
CodeForces - 1312D Count the Arrays(思维+组合数学)
83 0
Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861C Did you mean...【字符串枚举,暴力】
C. Did you mean... time limit per test:1 second memory limit per test:256 megabytes input:standard input output:standard out...
1097 0