zoukankan      html  css  js  c++  java
  • CF997A Convert to Ones

    CF997A Convert to Ones

    题目大意:

    给你一个长度为 nn 的01串( n $leq 3*10^5$ ),你有两种操作:

    1.将一个子串翻转,花费 XX

    2.将一个子串中的0变成1,1变成0,花费 YY

    求你将这个01串变成全是1的串的最少花费。

    首先,你要操作的次数一定是这个串中0的段数,操作2覆盖消去一段0,操作1翻转将两段合并成一段

    如果单纯考虑操作2,需要进行cnt次(这个串中0的段数),

    如果单纯考虑操作1,需要进行cnt-1次(这个串中0的段数)+1(必须进行操作2)。

    既然操作1,2的效果是一样的,那么cnt-1次就可以取最小的x,y去操作,最后再加上最后一次覆盖即可。

    #include<bits/stdc++.h>
    
    using namespace std;
    string s;
    int x,y,n;
    int main() {
        cin>>n>>x>>y;
        cin>>s;
        int cnt=0;
        s[s.length()]='1';
        for(int i=0;i<s.length();i++){
            if(s[i]=='0'&&s[i+1]=='1') ++cnt;
        }
        if(!cnt) printf("0");
        else printf("%lld",1ll*min(x,y)*(cnt-1)+y);
        return 0;
    }
  • 相关阅读:
    2019.1.10英语笔记
    2019.1.9专业课笔记
    团队触发器
    团队脚本备份
    导表
    oslo.config
    nginx启动、重启、关闭
    常见的awk内建变量
    LVM
    Django, one-to-many, many-to-many
  • 原文地址:https://www.cnblogs.com/song-/p/9610878.html
Copyright © 2011-2022 走看看