CF1383E 题解
题意
给定一个长度为 \(n\) 的 01 串 \(a\)。在一次操作中,你可以选择任意一个 \(i\in[1,|a|)\),令 \(a_i=\max(a_i,a_{i+1})\),然后将 \(a_{i+1}\) 删除。你可以进行不超过 \(n-1\) 次操作,问一共能得到多少种 01 串,答案对 \(10^9+7\) 取模。
\(1\le n\le 10^6\)。
题解
若对操作的序列计数,此题难以处理。我们通过一些转换,对可以得到的串计数。
利用 \(1\) 将串划分,记录每段 \(0\) 的数量。如 \(001010011\) 就是 \(\{2,1,2,0,0\}\)。那么可行的操作就是将一个大于 \(0\) 的数减 \(1\),或删除一个不在头尾的 \(0\)。于是一个串与一个序列一一对应。下面我们对序列计数。
头尾不删,则可以扔掉,最后乘上系数 \((a_{1}+1)(a_n+1)\)。此时可知一个长为 \(m\) 的序列 \(b\) 可行的充要条件:存在 \(i_1<i_2<\dots<i_m\) 满足 \(\forall j\in[1,m],b_j\le a_{i_j}\)。用类似子序列自动机的方式判断。每次向后找到第一个大于等于 \(b_j\) 的位置并移动指针。
然后可以 \(\text{dp}\)。设 \(f_i\) 表示指针在 \(i\),每次枚举下一个放的数。则有 \(f_i=\sum\limits_{j<i}f_j+\max(0,a_i-\max\limits_{k=j+1}^{i-1}a_k)\)。单调栈可做到 \(O(n)\)。
CF1383E 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- 教你用JavaScript实现计数器
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个计数器.点击按钮数字改变,点击重置数字归0.通过实战我们将学会forEach循环.c ...
- netkit-telnet源码编译安装
介绍 Linux 下流行的 telnet 实现有两个: GNU inetutils: http://ftp.gnu.org/gnu/inetutils/ 哈佛netkit-telnet 源码包:htt ...
- AIR32F103(七) AIR32F103CBT6/CCT6启用96K内存
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- 【转载】VUE入门教程
vue-cli是官方提供的一个脚手架,用于快速生成一vue项目,有点类似java中使用maven构建项目 需要环境 Node.js : http://nodejs.cn/download/ 安装完后在 ...
- Wireshark网卡无法找到或没有显示的问题
问题背景 最近在处理公司内网域名解析的问题,发现配置好一个新域名在内网环境可以正常解析成内网IP,但使用深信服VPN却无法正常解析,并且其他域名使用深信服VPN可以正常解析,所以参考<内网域名解 ...
- wsl2 kali修改语言
直接执行sudo dpkg-reconfigure locales 会提示 dpkg-query: package 'locales' is not installed and no informat ...
- 记一个难以发现的 UB
观察以下代码: vector<int> X, Y, A, val; inline int ls(int p) { return p << 1; } inline int rs( ...
- python之路28 网络编程基础之OSI七层协议模型
OSI七层协议 """ 七层模型,亦称OSI(Open System Interconnection).参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间 ...
- 《STL源码剖析》Sort排序分析
整体而言: sort算法在数据量大时采用Quick Sort(快速排序),一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负担,就改用Insertion Sort(插 ...
- C++ 一种交换两个数的思路
在 Lua 或者 Python 中可以使用多值赋值语句来交换两个数.例如:a, b = b, a.在 C++ 中有没有类似的操作? 先解析一下多值赋值的原理,a, b = b, a 等价于 t1, t ...