牛客练习赛70 B.拼凑 (序列自动机)

题意:有一个模板串,有\(T\)个字符串,从字符串中找到某个子串,使得这个子串中的子序列包含模板串,求最短的子串的长度.
题解:找子序列,很容易想到序列自动机,根据序列自动机的原理,我们一定可以确保除了第一个字符,其他的字符的位置都是最优的,所以我们先对模板串的第一个字符\(p\)记录它的所有位置,然后再遍历它的位置,每次都跑一下序列自动机维护答案的最小值即可.
代码:
const string p="puleyaknoi"; int t;
string s;
vector<int> v[N];
vector<int> cnt; int main() {
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
cin>>s;
cnt.clear();
int len=(int)s.size();
for(int i=0;i<len;++i){
int num=s[i]-'0';
v[num].pb(i);
}
for(int i=0;i<len;++i){
if(s[i]=='p') cnt.pb(i);
}
bool flag=false;
int res=INF;
for(auto w:cnt){
int pos=w;
for(int i=1;i<10;++i){
int num=p[i]-'0';
auto now=lower_bound(v[num].begin(),v[num].end(),pos+1);
if(now==v[num].end()){
break;
}
else pos=*now;
if(i==9){
flag=true;
res=min(res,pos-w+1);
}
}
}
if(!flag) cout<<-1<<endl;
else cout<<res<<endl; for(auto w:s){
int num=w-'0';
v[num].clear();
}
} return 0;
}
牛客练习赛70 B.拼凑 (序列自动机)的更多相关文章
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- 牛客练习赛26 D xor序列 (线性基)
链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 牛客小白月赛12J(序列自动机)
题目链接:https://ac.nowcoder.com/acm/contest/392/J 题目大意:给一个字符串s,然后在给出n个其他的字符串,判断每个字符串是否为s的子序列. 例: 输入: no ...
- 牛客练习赛26—D xor序列 —线性基
这是我第一次写关于线性基的题目.其实这题很好理解,先把给出的数能异或出的值给存在p数组里面,p[i]代表着该异或出的数的最高位为第i位且为1. 求出来后,再把x,y处理下,然后直接一位一位的判断是否为 ...
- 牛客练习赛70 D.数树 (模拟,STL)
题意:每次有\(3\)中操作,对两个点连条边,删去某条边,或者问当前大小不为\(1\)的树的数量.连重边或者删去一条不存在的边,这样的白痴操作可以无视qwq. 题解:水题,用map存一下pair然后分 ...
- 牛客练习赛70 A.重新排列 (,字符串思维)
题意:有一个模板串,给你\(T\)个字符串,选取最短的子串,使其重新排列后包含模板串,求最短的子串的长度 题解:遍历字符串,记录每个字符出现的最后位置,每记录一个后再遍历子串,找到子串需要的所有的字符 ...
- 牛客练习赛44 A 小y的序列 (模拟,细节)
链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- 牛客练习赛28-B(线段树,区间更新)
牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, 1 l r 询问区间[l,r]内的元素和 2 l r 询问区间[l,r]内的 ...
- 牛客练习赛42 C 出题的诀窍 (贡献,卡常)
牛客练习赛42 C 出题的诀窍 链接:https://ac.nowcoder.com/acm/contest/393/C来源:牛客网 题目描述 给定m个长为n的序列a1,a2,-,ama_1 , a_ ...
随机推荐
- 安装percona-toolkit
http://www.percona.com/software/percona-toolkityum -y install perl-DBIyum -y install perl-DBD-mysqly ...
- CTF实验吧-WEB题目解题笔记(1)简单的登陆题
1.简单的登陆题 解题链接: http://ctf5.shiyanbar.com/web/jiandan/index.php Burp抓包解密 乱码,更换思路.尝试id intruder 似乎也没什 ...
- 集成多种协议、用于 USB-A 和 TYPE-C 双端口输出的快充协议芯片IP2726
1. 特性 支持 1A1C 支持 USB-A 和 TYPE-C 双端口输出 单口输出支持全部快充协议 双口同时插入时降压到 5V 快充规格 集成 QC2.0/QC3.0/QC4/QC4+输 ...
- celery应用
celery---分布式任务队列 Celery是一个简单,灵活且可靠的分布式系统,可以处理大量消息,同时为操作提供维护该系统所需的工具. Celery是一个基于python开发的模块,可以帮助我们对任 ...
- TCP为什么要三次握手与四次分手?
TCP协议简介 TCP协议是五层协议中运输层的协议,下面依赖网络层.链路层.物理层,对于一个报文想发到另一台机器(假设是服务器)上对等层,每一个所依赖的层都会对报文进行包装,例如TCP协议就依赖网络层 ...
- 为什么从REST转向gRPC 需要流式传输搜索结果,也就是在有第一批结果时就开始传输
https://mp.weixin.qq.com/s/aEO3Y8SkObNgfQU3z8sH2w 我们为什么从REST转向gRPC 原创 Levin Fritz InfoQ 2019-06-23 作 ...
- The Node.js Event Loop, Timers, and process.nextTick()
The Node.js Event Loop, Timers, and process.nextTick() | Node.js https://nodejs.org/uk/docs/guides/e ...
- SO_REUSEPORT 使用
https://www.cnblogs.com/Anker/p/7076537.html
- TCP/IP建立连接的时候ISN序号分配问题
初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(different instantiations/inc ...
- 令牌桶、漏斗、冷启动限流在sentinel的应用
分布式系统为了保证系统稳定性,在服务治理的限流中会根据不同场景进行限流操作,常见的限流算法有: 令牌桶:可容忍一定突发流量的速率的限流,令牌桶算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌桶 ...