zoukankan      html  css  js  c++  java
  • Codeforces Round #581 (Div. 2)D(思维,构造,最长非递减01串)

    #define HAVE_STRUCT_TIMESPEC
    #include<bits/stdc++.h>
    using namespace std;
    char s[100007];
    int main(){
    cin>>s+1;
    int n=strlen(s+1);
    int cnt=0;
    for(int i=n;i>=1;--i){//从后向前,保证后面的解都是合法的情况下
    if(s[i]=='1'){//如果当前位置的数字是1
    if(cnt)//i后面1的个数小于0的个数,此时如果把i位置从1变成0会导致以i为起点的最长非递减串增长(0的个数加一了),所以不可以变,把后面0比1多的个数减一即可
    cnt--;
    else//i后面1的个数大于等于0的个数,此时以i为起点的最长非递减串长度为1的个数,所以把i的1改成0并不会影响长度
    s[i]='0';
    }
    else if(s[i]=='0')//如果当前位置的数字是0
    cnt++;//s[i]一定是后面以i为起点的区间的最长非递减串的一部分,所以t[i]必须为0,否则t中以i为起点len为终点的最长非递减串长度将会小于s中的长度
    }
    for(int i=1;i<=n;++i)
    cout<<s[i];
    return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    Activity相关知识点总结
    大端和小端
    两年前端感悟
    线性结构与树形结构相互转换(ES6实现)
    基于webpack的React项目搭建(三)
    MySQL安装之yum安装
    EL表达式中fn函数
    配置Log4j 详解
    Canvas学习:封装Canvas绘制基本图形API
    canvas
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11503656.html
Copyright © 2011-2022 走看看