传送门

题意:给一个01串SSS,求一个等长的01串TTT

  1. SSS和TTT所有对应位置的子串最长不下降子序列长度(以下简称LIS\text{LIS}LIS)相同
  2. TTT中0的数量尽量多

∣S∣≤100000|S| \leq 100000∣S∣≤100000

对于一个01串SSS,我们称它是固定的,当且仅当不存在一个长度相同的01串TTT,它们所有对应位置的子串LIS\text{LIS}LIS相同(即修改任意一个位置都会改变LIS\text{LIS}LIS),并且规定空串是固定的。

  • 两个固定的串拼起来仍然是固定的。如果修改了一个位置,根据定义,这个位置原来归属的串的LIS\text{LIS}LIS一定发生了变化。
  • 一个固定的串0和1个数相等,LIS\text{LIS}LIS等于其长度的一半,即全选0或全选1。前面和下一条递归证明,边界为空串。后面由于一组01(见下一条)的1一定在0的前面,最多只有1的贡献。
  • 一个固定的串前面添“1”,后面添“0”后仍然固定。和上一条递归证明,修改中间同理,修改两边一定会增加1。

我们在原串中删除所有极大的固定子串,由于没有“10”,所以剩下的一定是“00000……11111”

由定义,固定子串是不能修改的

【解法一】

我们发现这玩意就是括号匹配

用个栈维护一下,得到剩下的字符

然后把后面的一坨1都改成0。显然不能改更多的。

这样对于任意一个子串,把它的极大固定子串挖出来,由于后缀的“1”可能改成了“0”,把影响的段改成“全选0”后LIS\text{LIS}LIS不会变化,可以保证合法。

【解法二】

结论:某个1可以改为0,当且仅当修改后整个串的LIS\text{LIS}LIS不变。

其实本质是相同的。如果某个位置的1在某个固定子串中,显然修改会改变这个子串的LIS\text{LIS}LIS,并且会改变原串的LIS\text{LIS}LIS。否则对LIS\text{LIS}LIS不会产生影响。

倒着DP一下即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 100005
using namespace std;
char s[MAXN];
int pre0[MAXN],suf1[MAXN],dp[MAXN];
int main()
{scanf("%s",s+1);int n=strlen(s+1);for (int i=1;i<=n;i++) pre0[i]=pre0[i-1]+(s[i]=='0');for (int i=n;i>=1;i--) suf1[i]=suf1[i+1]+(s[i]=='1');for (int i=n;i>=1;i--) dp[i]=(s[i]=='1'? max(suf1[i],dp[i+1]):dp[i+1]+1);int now=0;for (int i=1;i<=n;i++)if (s[i]=='0'||now+1+dp[i+1]<=dp[1]) putchar('0'),++now;else putchar('1');return 0;
}

【CF1204D】Kirk and a Binary String【结论题】【LIS】相关推荐

  1. D1. Kirk and a Binary String (easy version)

    题目链接:http://codeforces.com/contest/1204/problem/D1 D1. Kirk and a Binary String (easy version) time ...

  2. CodeForces - 1498E Two Houses(交互+图论,结论题)

    题目链接:点击查看 题目大意:给出一个由 nnn 个点组成的竞赛图,现在要求出一组点对 (A,B)(A,B)(A,B),满足两个点可以互达,且入度的绝对值之差最大 题目分析:结论题,先放结论: 结论: ...

  3. agc015F - Kenus the Ancient Greek(结论题)

    题意 题目链接 $Q$组询问,每次给出$[x, y]$,定义$f(x, y)$为计算$(x, y)$的最大公约数需要的步数,设$i \leqslant x, j \leqslant y$,求$max( ...

  4. Binary String Reconstruction CodeForces - 1352F(思维+构造)

    For some binary string s (i.e. each character si is either '0' or '1'), all pairs of consecutive (ad ...

  5. Binary String Minimizing CodeForces - 1256D(贪心)

    You are given a binary string of length n (i. e. a string consisting of n characters '0' and '1'). I ...

  6. 【2019牛客暑期多校训练营(第三场)- B】Crazy Binary String(思维,01串,前缀和)

    题干: 链接:https://ac.nowcoder.com/acm/contest/883/B 来源:牛客网 ZYB loves binary strings (strings that only ...

  7. nyoj 题目5 Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose alpha ...

  8. Binary String Matching

    Binary String Matching 描述 Given two strings A and B, whose alphabet consist only '0' and '1'. Your t ...

  9. Binary String Constructing(CF-1003B)

    Problem Description You are given three integers aa, bb and xx. Your task is to construct a binary s ...

最新文章

  1. VisualSVN5.1.7补丁原创发布
  2. 学python工资高吗-Python工资一般是多少 看完吓你一跳
  3. Delphi - 被廉价甩卖的传奇
  4. 一个在校的普通前端小姐姐的2021
  5. dsp怪胎_2012年6月最佳怪胎文章
  6. Git常用指令及功能总结
  7. C++深度探索系列:智能指针(Smart Pointer) [一] (转)
  8. Hadoop2.7.3完全分布式集群搭建(三节点)
  9. 汉诺塔的图解递归算法
  10. 自称骇客的基本都是骗子
  11. (转)wuauclt.exe病毒解决方案
  12. [《所遇随心》偶感小记]2012年8月28日
  13. agx 安装ros opencv_CARLA与Autoware和ROS的联合仿真安装过程
  14. 目标检测—DiffusionDet:用于检测的概率扩散模型笔记—DDPM
  15. 厨神之路一--群英荟萃1
  16. 2023年全国最新工会考试精选真题及答案41
  17. 骆小刚:Linux后台服务启动方式systemd、daemon、nohup大比拼
  18. stm32F103R6之BKP(备份寄存器)
  19. eset找不到服务器更新失败,ESET NOD32连接到服务器以更新常见的错误检测方法
  20. 相机镜头上的所有字母,首字母缩写和数字代表什么?

热门文章

  1. 第2章 Python与数据分析
  2. 学霸真的比学渣更讨女孩子欢心吗?
  3. 奇妙的数学动图,美到令人窒息!
  4. 每日一笑 | 为什么Python比Java更受欢迎?
  5. 在学术论文投稿时你遇到过最奇葩的审稿意见是什么?
  6. java web容器_Java Web容器安全
  7. 启动ipython内核发生错误_ipython3启动
  8. lcd屏幕抖动_电视屏幕面板大科普!买电视之前必看!
  9. java怎么打印进制,java编程思维_007打印二进制,八进制,十六进制
  10. linux 内核 三天吐血,编译安装——吐血经验,内附脚本