码迷,mamicode.com
首页 > 其他好文 > 详细

分割01串/最大子段和——cf 1370E

时间:2020-07-03 23:36:15      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:int   贪心   最大子段和   分割   pac   def   col   oid   nbsp   

这题转化一下,就是弄出个01串,然后问最少可以分割成多少个01串

怎么求?贪心策略,如果当前全是0结尾串,又来了一个0,那么只能又多了一个0结尾串,如果来的是1,那么就少了个0结尾串,多了个1结尾串

看了下正解貌似是求最大子段和。。

#include<bits/stdc++.h>
using namespace std;
#define N 4000005
 
int n,p,ans;
char a[N],b[N],s[N];
 
void solve(){
    int tot1=0,tot0=0;
    for(int i=1;i<=p;i++){
        if(s[i]==0){
            if(tot1)tot1--,tot0++;
            else tot0++;
        }else {
            if(tot0)tot1++,tot0--;
            else tot1++;
        }
        ans=max(ans,tot1+tot0);
    }
}
 
int main(){
    cin>>n;
    cin>>(a+1)>>(b+1);
    int x,y;
    x=y=0;
    for(int i=1;i<=n;i++){
        if(a[i]==1)x++;
        if(b[i]==1)y++;
    }
    if(x!=y){puts("-1");return 0;}
    
    for(int i=1;i<=n;i++)
        if(a[i]!=b[i])s[++p]=a[i];
    solve();
    
    cout<<ans<<\n;
} 

 

分割01串/最大子段和——cf 1370E

标签:int   贪心   最大子段和   分割   pac   def   col   oid   nbsp   

原文地址:https://www.cnblogs.com/zsben991126/p/13232984.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!