将$s$中的01分别变为$1,-1$,即得到一个序列$a_{i}$(设其长度为$n$,下标范围为$[1,n]$)

对$a_{i}$建立一张有向图,其点集合为$Z$,并对$\forall 0\le k<n$从$\sum_{i=1}^{k}a_{i}$向$\sum_{i=1}^{k+1}a_{i}$连边(允许重边),那么$a_{i}$即对应于其中一条以0为起点的欧拉路

若对区间$[l,r]$操作,记操作后的序列为$a'_{i}$,则有$\sum_{i=l}^{r}a_{i}=0(=\sum_{i=l}^{r}a'_{i})$且$\forall l\le i\le r,a'_{i}=-a_{r-(i-l)}$

根据此性质,简单来分析前缀和的变化:

1.对于$k\not\in [l,r),\sum_{i=1}^{k}a'_{i}=\sum_{i=1}^{k}a_{i}$

2.对于$k\in [l,r),\sum_{i=1}^{k}a'_{i}=\sum_{i=1}^{l-1}a_{i}-\sum_{i=l}^{k}a_{r-(i-l)}=\sum_{i=1}^{r-(k-l)-1}a_{i}$

进一步的,再来分析这条欧拉路的变化,结合前缀和的变化即是将原本从$\sum_{i=1}^{l-1}a_{i}$到$\sum_{i=1}^{r}a_{i}$这一个环(注意两值相同)反转(将所有边变为反向边)并倒序经过

另一方面,显然每一个环(包括非简单环)都可以以此法操作(注意这里的操作是对欧拉路)

换言之,问题即通过这样的操作最小化这条欧拉路的字典序

实际上,问题也可以看作:将图中的边看作无向边后,最小化以0为起点的欧拉路字典序

注意到操作只是反转边的方向,那么得到的欧拉路一定是新问题中的欧拉路

另一方面,即要通过这条欧拉路(通过操作)构造出所有新问题中的欧拉路

对其归纳,若其第一步与这条欧拉路方向不同,分类讨论:

1.若该边仅存在一条(指无向边),那么起点的另一个方向即必然不存在边(否则这不是欧拉路),进而显然方向不会不同

2.若该边存在多条,之后总有一次从该边返回起点,从最初到该位置全部反转后方向即相同

进一步的,将两者第一步均删除后即变为归纳的问题(边数减少),也即得证

而对于这个新问题,可以利用图的特殊性直接贪心:初始$x=0$,每一次优先向$x-1$移动(除非该边仅存在一条且$x$到$x+1$仍有边,此时向$x+1$移动),最终显然字典序最小

时间复杂度为$o(n)$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 500005
4 int t,n,x,sum,cnt[N<<1];
5 char s[N];
6 int main(){
7 scanf("%d",&t);
8 while (t--){
9 scanf("%s",s+1);
10 n=strlen(s+1),x=sum=n;
11 for(int i=0;i<=(n<<1);i++)cnt[i]=0;
12 for(int i=1;i<=n;i++){
13 if (s[i]=='0')cnt[--sum]++;
14 else cnt[sum++]++;
15 }
16 for(int i=1;i<=n;i++){
17 if ((cnt[x-1]>1)||(!cnt[x])){
18 putchar('0');
19 cnt[--x]--;
20 }
21 else{
22 putchar('1');
23 cnt[x++]--;
24 }
25 }
26 putchar('\n');
27 }
28 return 0;
29 }

[cf1458D]Flip and Reverse的更多相关文章

  1. CF1458D Flip and Reverse[题解]

    Flip and Reverse 题目大意 给定一个 \(01\) 字符串,有机会进行若干次操作,对于每一次操作: 选择该字符串的子串,要求是该子串内包含数量相同的 \(0\) , \(1\) 字符. ...

  2. 多校联训 DS 专题

    CF1039D You Are Given a Tree 容易发现,当 \(k\) 不断增大时,答案不断减小,且 \(k\) 的答案不超过 \(\lfloor\frac {n}{k}\rfloor\) ...

  3. 小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载四(场景切换)

    作为一款真正有使用价值的应用,首先应该至少有两个页面,通过页面的切换来实现更多的交互.比如手机人人网,打开以后先是进入登录页面,登录后会有新鲜事,然后拉开左边的面板,能看到相册.悄悄话.应用之类的其他 ...

  4. bzoj 2631: tree 动态树+常数优化

    2631: tree Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1716  Solved: 576[Submit][Status] Descrip ...

  5. 白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》串行4(场景变化)

    作为一个真正的利用价格值应用,首先,你应该至少有两页,通过切换页面来实现很多其他互动.比如手机人人网,首先,打开后进入登录页面,将有登录后,新的东西.然后拉左侧面板.你可以看到相册.私人信息.像其他应 ...

  6. css3 翻牌动画

    最近做了一个特效,css是从网上找的,地址是这个: CSS3 animate flip下的纸牌翻转效果实例页面 把其中核心的css代码扒出来如下: /* The properties in this ...

  7. MOG插件(葡萄牙语,略作翻译)

    这次记录下MOG大神的插件,自从我发现了这个插件,似乎开启了一个新世界诶~~~ 网址 https://atelierrgss.wordpress.com 1. MOG_YuruYuri.js CARA ...

  8. WebApp之H5登录注册

    代码indexhtml <!DOCTYPE html> <html> <head> <meta charset="utf-8"> & ...

  9. 平衡树 & LCT

    1. 非旋 Treap(FHQ Treap) 1.1. 算法简介 FHQ Treap 的功能非常强大.它涵盖了 Treap 几乎所有的功能 所以我非常后悔学了 Treap,浪费时间. FHQ 的核心思 ...

随机推荐

  1. Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路

    写在前面 ​ 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...

  2. C++学习 2 指针

    指针:指针保存的是数据的地址: #include<iostream> using namespace std; int main() { //1.定义指针 int a = 10; //指针 ...

  3. Knativa 基于流量的灰度发布和自动弹性实践

    作者 | 李鹏(元毅) 来源 | Serverless 公众号 一.Knative Knative 提供了基于流量的自动扩缩容能力,可以根据应用的请求量,在高峰时自动扩容实例数:当请求量减少以后,自动 ...

  4. 从0到1使用Kubernetes系列(二):安装工具介绍

    该系列第一篇为:<从0到1使用Kubernetes系列--Kubernetes入门>.本文是Kubernetes系列的第二篇,将介绍使用Kubeadm+Ansible搭建Kubernete ...

  5. 【UE4 C++ 基础知识】<14> 多线程——AsyncTask

    概念 AsyncTask AsyncTask 系统是一套基于线程池的异步任务处理系统.每创建一个AsyncTas,都会被加入到线程池中进行执行 AsyncTask 泛指 FAsyncTask 和 FA ...

  6. 【UE4 C++】 获取Actor、Controller、Pawn、Character

    获取 Actor TActorIterator 遍历 可以用于遍历 Actor,也可以用于遍历 Component for (TActorIterator<AStaticMeshActor> ...

  7. Spring Cloud Gateway Route Predicate Factory 的使用

    Spring Cloud Gateway的使用 一.需求 二.基本组成 1.简介 2.核型概念 1.Route 路由 2.Predicate 谓语.断言 3.Filter 过滤器 3.工作原理 三.网 ...

  8. (三)、Docker常用基础命令

    1.Docker 帮助命令 帮助命令: docker version 查看版本 docker info 查询docker详细信息 docker --help 查看命令帮助 2.Docker 镜像命令 ...

  9. Noip模拟63 2021.9.27(考场惊现无限之环)

    T1 电压机制 把题目转化为找那些边只被奇数环包含. 这样的话直接$dfs$生成一棵树,给每个点附上一个深度,根据其他的非树边都是返祖边 可以算出环内边的数量$dep[x]-dep[y]+1$,然后判 ...

  10. [WPF] 在 Windows 11 中处理 WindowChrome 的圆角

    1. Windows 11 的圆角 在直角统治了微软的 UI 设计多年以后,微软突然把直角骂了一顿,说还是圆角好看,于是 Windows 11 随处都可看到圆角设计.Windows 11 使用 3 个 ...