AT3950-[AGC022E]Median Replace【贪心,dp】
正题
题目链接:https://www.luogu.com.cn/problem/AT3950
题目大意
一个包含\(?,0,1\)的长度为奇数的序列,把\(?\)替换为\(0/1\)。每次可以选择三个数变成它们的中位数,求有多少种替换方案使得能够把序列最终变为一个\(1\)。
\(1\leq |S|\leq 3\times 10^5\)
解题思路
好像是\(XJ\)那边杂题选讲时候的题
考虑优先减少\(0\)的数量。考虑一些一定优的情况\(000->0,01->\varnothing\)。
这样序列就会变为前面都是\(1\),后面是\(1/2\)个\(0\)的情况。此时如果\(1\)的数量不少于\(0\)的数量就可以了。
那么\(1\)的数量超过\(2\)的部分也没有意义,设\(f_{i,j}\)表示现在到底\(i\)个时抵消的前面有\(i\)个\(1\),后面\(j\)个\(0\)时的方案数。显然\(i,j\in[0,2]\),转移即可。
时间复杂度\(O(n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=3e5+10,P=1e9+7;
ll f[N][3][3],n,ans;
char s[N];
signed main()
{
scanf("%s",s);n=strlen(s);
f[0][0][0]=1;
for(ll i=0;i<n;i++){
for(ll j=0;j<3;j++)//num0
for(ll k=0;k<3;k++){//num1 (0 on the 1)
if(s[i]=='?'||s[i]=='0'){
if(j==2)(f[i+1][1][k]+=f[i][j][k])%=P;
else (f[i+1][j+1][k]+=f[i][j][k])%=P;
}
if(s[i]=='?'||s[i]=='1'){
if(j)(f[i+1][j-1][k]+=f[i][j][k])%=P;
else (f[i+1][j][min(k+1,2ll)]+=f[i][j][k])%=P;
}
}
}
for(ll j=0;j<3;j++)
for(ll k=j;k<3;k++)
(ans+=f[n][j][k])%=P;
printf("%lld\n",ans);
return 0;
}
AT3950-[AGC022E]Median Replace【贪心,dp】的更多相关文章
- AT3950 [AGC022E] Median Replace
题目传送门 Description 有一个长度为 \(n\) 的 \(01\) 串,里面有一些还没有确定,我们标记为 ? .可以进行若干次操作,每次操作可以把三个相邻的数替换成它们的中位数.问有多少种 ...
- AGC022E Median Replace
题意 给出一个长度为奇数\(n\)的残缺01串,问有多少种补全方法,每次将连续三个位替换为它们的中位数后,能有一种方案使它变为1. \(n \le 3*10^5\) 思路 左边表示栈顶. 将操作简化为 ...
- Atcoder Grand Contest 022 E - Median Replace(dp)
Atcoder 题面传送门 & 洛谷题面传送门 首先考虑对于固定的 01 串怎样计算它是否可以通过将三个连续的 \(0\) 或 \(1\) 替换为其中位数得到.我们考虑单调栈,新建一个栈,栈底 ...
- [题解] [AGC022E] Median Replace
题目大意 有个奇数长度的 \(01\) 串 \(s\) 其中有若干位置是 \(?\). 每次可将 \(3\) 个连续的字符替换成这三个数的中位数. 求有多少方案将 \(?\) 替换成 \(0/1\) ...
- 【BZOJ-3174】拯救小矮人 贪心 + DP
3174: [Tjoi2013]拯救小矮人 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 686 Solved: 357[Submit][Status ...
- BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP
BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...
- 洛谷P4823 拯救小矮人 [TJOI2013] 贪心+dp
正解:贪心+dp 解题报告: 传送门! 我以前好像碰到过这题的说,,,有可能是做过类似的题qwq? 首先考虑这种显然是dp?就f[i][j]:决策到了地i个人,跑了j个的最大高度,不断更新j的上限就得 ...
- 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp
题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...
- 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp
题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...
- hdu 1257 最少拦截系统【贪心 || DP——LIS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- WindowsService开发简单入门
参考网址: https://www.cnblogs.com/wenlong512/p/7355971.html 一.简介 程序创建在 Windows 会话中,可长时间运行的可执行应用程序.这些服务可以 ...
- 十七:使用JDBC处理MySQL大数据
一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob,clob用于存储大文本,blob用于存储二进制数据,例如图像.声音.二进制文等. 在实际开发中,有时 ...
- centos 搭建jenkins+git+maven
git+maven+jenkins持续集成搭建 发布人:[李源] 2017-12-08 04:33:37 一.搭建说明 系统:centos 6.5 jdk:1.8.0_144 jenkins ...
- Mybatis-plus<一> Springboot框架使用MybatisPlus代码自动生成器
Mybatis-plus<一> Springboot框架使用MybatisPlus代码自动生成器 Mybatis-plus官网: https://mp.baomidou.com/ Demo ...
- HashMap 为什么线程不安全?
作者:developer http://cnblogs.com/developer_chan/p/10450908.html 我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线 ...
- java线程池-工作队列workQueue
线程池之工作队列 ArrayBlockingQueue 采用数组来实现,并采用可重入锁ReentrantLock来做并发控制,无论是添加还是读取,都先要获得锁才能进行操作 可看出进行读写操作都使用了R ...
- Python__Xpath模块
import requests from lxml import etree # 导入xpath headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6 ...
- 【Azure 应用服务】Python flask 应用部署在Aure App Service中作为一个子项目时,解决遇见的404 Not Found问题
问题描述 在成功的部署Python flask应用到App Service (Windows)后,如果需要把当前项目(如:hiflask)作为一个子项目(子站点),把web.config文件从wwwr ...
- inet_aton和inet_ntoa
3.1 inet_aton() int inet_aton(const char *cp, struct in_addr *inp); 参数说明: cp : IPv4点分十进制字符串,例如" ...
- djangoProject default codes
1 === 2 settings.py 3 === 4 """ 5 Django settings for djangoProject project. 6 7 Gene ...