【kmp】似乎在梦中见过的样子
参考博客:
BZOJ 3620: 似乎在梦中见过的样子
【KMP】似乎在梦中见过的样子
题目描述
这是Modoka的一个噩梦,也同时是上个轮回中所发生的事。为了使这一次Madoka不再与QB签订契约,Homura决定在刚到学校的第一天就解决QB。然而,QB也是有许多替身的(但在第八话中的剧情显示它也有可能是无限重生的),不过,意志坚定的Homura是不会放弃的——她决定消灭所有可能是QB的东西。现在,她已感受到附近的状态,并且把它转化为一个长度为n的字符串交给了学OI的你。
现在你从她的话中知道,所有形似于A+B+A的字串都是QB或它的替身,且∣A∣≥k,∣B∣≥1(位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一子串),然后你必须尽快告诉Homura这个答案——QB以及它的替身的数量。
注:对于一个字符串S,|S|表示S的长度。
输入
输出
样例输入
aaaaa
1
样例输出
6
提示
对于全部数据,1≤∣S∣≤1.5×104,1≤k≤100,且字符集为所有小写字母。
【题解】
就在参考博客里面了。
主要是自己不要意思把别人画的图复制过来。
枚举所有左端点然后进行向右看看有没有一个最长前缀是符合要求的。
就是这么一个想法,但是细节稍微有点多。因为两层for需要更细心。
【代码】:
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
const int N = 1e5+; char s[N];
int k,n,ans;
int Next[N];
int main()
{
scanf("%s%d",s+,&k);
n = strlen( s+ ); //printf("%s %d %d\n",s+1,k,n);
//枚举所有合法的左端点,左端点 预留2*k的距离
for(int L=; L<= n-(k*) ; L++ ) { for(int i = ; i <= L ; i++ ) Next[i] = L- ; //提前预处理好Next数组
for(int i=L+,j=L-;i<=n;i++){
while( j != L- && s[i] != s[j+] ) j=Next[j];
if( s[i] == s[j+] ) j++ ;
Next[i] = j ;
} for(int i=L+,j=L-;i<=n;i++){
while( j != L- && s[i] != s[j+] ) j=Next[j];
if( s[i] == s[j+] ) j++ ; //预处理的Next派上用场了
//当最长前缀的两倍 > 当前串(右端点-左端点)的长度
//利用Next数组缩短距离
while( (j-L+)* >= (i-L+) ) j = Next[j] ; //符合题意 累加答案,即前缀长度大于k
if( j-L+ >= k ) ans ++ ;
} }
printf("%d\n",ans);
return ;
}
【kmp】似乎在梦中见过的样子的更多相关文章
- 【BZOJ 3620】 3620: 似乎在梦中见过的样子 (KMP)
3620: 似乎在梦中见过的样子 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 755 Solved: 445 Description “Madok ...
- 似乎在梦中见过的样子 (KMP)
# 10047. 「一本通 2.2 练习 3」似乎在梦中见过的样子 [题目描述] 「Madoka,不要相信 QB!」伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Mo ...
- 【BZOJ3620】似乎在梦中见过的样子 KMP
[BZOJ3620]似乎在梦中见过的样子 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个 ...
- BZOJ 3620: 似乎在梦中见过的样子
似乎在梦中见过的样子.... 一道水题调了这么久,还半天想不出来怎么 T 的...佩服自己(果然蒟蒻) 这题想想 KMP 但是半天没思路瞟了一眼题解发现暴力枚举起始点,然后 KMP 如图: O( n2 ...
- BZOJ_3620_似乎在梦中见过的样子_KMP
BZOJ_3620_似乎在梦中见过的样子_KMP Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka ...
- bzoj3620似乎在梦中见过的样子
bzoj3620似乎在梦中见过的样子 题意: 给出一个字符串,要求求出形如A+B+A的子串数量,且lenA≥k,lenB≥1.字符串长度≤15000,k≤100,所以字符长度为小写字母. 题解: 第一 ...
- [BZOJ 3620] 似乎在梦中见过的样子 【KMP】
题目链接:BZOJ - 3620 题目分析 这道题使用 KMP 做 O(n^2) 的暴力就能过. 首先,我们依次枚举字串左端点 l ,然后从这个左端点开始向后做一次 KMP. 然后我们枚举右端点 r ...
- BZOJ.3620.似乎在梦中见过的样子(KMP)
题目链接 /* 896kb 6816ms A+B+A是KMP的形式,于是固定左端点,对于每个位置i,若fail[i]所能到的点k中(k=fail[fail[fail[...]]]),有满足len(l~ ...
- 【kmp】bzoj3620: 似乎在梦中见过的样子
考察kmp理解题 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个噩梦,也同时是上个轮回中 ...
随机推荐
- 关于在vue项目中使用wangEditor
1,vue中安装wangEditor 使用的npm安装 npm install wangeditor --save 2,创建公用组件 在components中创建wangEnduit文件夹 组件内容为 ...
- 观察者模式在android网络监控下的运用
github:https://github.com/shonegg/NetMonitor 一.对观察者模式的理解: 1.观察者模式,又叫发布-订阅(Publish/Subscribe)模式,定义的是对 ...
- hystrix(一) 简单使用, 以及动态配置更新
本文转载自https://my.oschina.net/u/1169457/blog/1787414 hystrix 简单使用, 以及动态配置更新 概述 只介绍同步模式下简单的使用, 有助于快速接入, ...
- PostgreSQL SELECT INTO和INSERT INTO SELECT 两种表复制语句
SELECT INTO和INSERT INTO SELECT两种表复制语句都可以用来复制表与表之间的数据,但是它们之间也有区别. 建表语句: bas_custom_rel表 CREATE TABLE ...
- hbase部署经验与坑总结
1.本地单机部署hbase,想要使用独立zookeeper,不使用自带的 vim conf/hbase-env.sh export HBASE_MANAGES_ZK=false 设置不使用自带zook ...
- Flume-数据流监控 Ganglia
Ganglia 由 gmond.gmetad 和 gweb 三部分组成. gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要收集指标数据的节点主机上.使用 ...
- 数据分析 - Power BI 链接 mysql 数据分析
链接数据库 点击确定后选择数据库, 然后输入用户名密码, 选择级别选择指定的数据库即可 之后弹出的导航器中即可有可预览的数据 更加推荐使用 再链接数据库的时候高级查询的 sql 中进行 sql 的执行 ...
- 监控查询慢sql
mysql:--查询慢sql:业务db用户 select b.time, b.host, b.id, b.state, b.user, b.db, b.info from information_s ...
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_06-vuejs研究-vuejs基础-v-on指令
3.v-on绑定一个按钮的单击事件 计算的按钮上加事件 点击计算的按钮,弹出的事件 定义一个Result的变量
- ios 自动去重
//resultArrM 数据原//_indexArray 过滤后的数据//MYSelectAreaModel 模型 /* 重定义索引 */ - (void)sy_indexArray{ /* 索 ...