CF-25E - Test(KMP)

KMP自动机详解(CF808G) 啥??kmp还有自动机?? 没错,我们经常听到ac自动机,后缀自动机之类的,kmp自动机我还真是第一次见。。。 前置知识:https://oi-wiki.org/string/kmp/(kmp都不会还学啥kmp自动机) 我接触到这个知识点是由于我碰见了这么一个题目:Codeforces 808G https://codeforces.com/contest/808/problem/G 中文题意在这:https://www.luogu.com.cn/. 阅读详情

E - Test
Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u

Description

Sometimes it is hard to prepare tests for programming problems. Now Bob is preparing tests to new problem about strings — input data to his problem is one string. Bob has 3 wrong solutions to this problem. The first gives the wrong answer if the input data contains the substring s1, the second enters an infinite loop if the input data contains the substring s2, and the third requires too much memory if the input data contains the substring s3. Bob wants these solutions to fail single test. What is the minimal length of test, which couldn't be passed by all three Bob's solutions?

Input

There are exactly 3 lines in the input data. The i-th line contains string si. All the strings are non-empty, consists of lowercase Latin letters, the length of each string doesn't exceed 105.

Output

Output one number — what is minimal length of the string, containing s1, s2 and s3 as substrings.

Sample Input

Input
ab
bc
cd
Output
4
Input
abacaba
abaaba
x
Output
11

思路:枚举6种排列方式,求出它这些字符串的最大重合数,总的减去最大重合数就是答案。

      如三个串是a,b,c;

  abc,acb,bac,bca,cab,cba 六种排列。找出最大重合。而这最大重合只能是末尾,所以用个KMP匹配两个串,返回主串结束时,模式串匹配的位置就是最大匹配数。

   不过要注意一点,但中间串是前串的子串时,应该用前串与后串匹配。如abc排列,b是a的子串则a与匹配,否则,b与c匹配。


#include<iostream>
#include<cstring>
using namespace std;
const int mm=100040;
int next[3][mm],l[3];
char s[3][mm];
void get(int x)///获得每个串的next
{
  int k=-1,j=0;
  next[x][0]=-1;
  while(j<l[x])
  {
    if(k==-1||s[x][k]==s[x][j])
    {
      ++k;++j;next[x][j]=k;
    }
    else k=next[x][k];
  }
}
int kmp(int x,int y)
{
  int j=0,k=0;
  while(j<l[y]&&k<l[x])
  {
    if(j==-1||s[x][k]==s[y][j])
      {++j;++k;}
    else j=next[y][j];
  }
  return j;///返回结尾的最大匹配数
}
int main()
{
  while(cin>>s[0]>>s[1]>>s[2])
  {
    l[0]=strlen(s[0]);
    l[1]=strlen(s[1]);
    l[2]=strlen(s[2]);
    for(int i=0;i<3;i++)get(i);
    int ans=-3333;
    int z,zz=0;
    ///手动枚举六种情况
    ///012
    z=kmp(0,1);
    zz=z;
    if(l[1]==z)zz+=kmp(0,2);
    else zz+=kmp(1,2);
    ans=ans>zz?ans:zz;
    ///021
    z=kmp(0,2);
    zz=z;
    if(l[2]==z)zz+=kmp(0,1);
    else zz+=kmp(2,1);
    ans=ans>zz?ans:zz;
    ///102
    z=kmp(1,0);
    zz=z;
    if(l[0]==z)
      zz+=kmp(1,2);
    else zz+=kmp(0,2);
    ans=ans>zz?ans:zz;
    ///120
    z=kmp(1,2);
    zz=z;
    if(l[2]==z)zz+=kmp(1,0);
    else zz+=kmp(2,0);
    ans=ans>zz?ans:zz;
    ///201
    z=kmp(2,0);zz=z;
    if(l[0]==z)zz+=kmp(2,1);
    else zz+=kmp(0,1);
    ans=ans>zz?ans:zz;;
    ///210
    z=kmp(2,1);zz=z;
    if(l[1]==z)zz+=kmp(2,0);
    else zz+=kmp(1,0);
    ans=ans>zz?ans:zz;
    ///这应该还可以编个函数调用枚举,但数据小就不整了
    zz=l[0]+l[1]+l[2];
    zz=zz-ans;
    cout<<zz<<"\n";
  }
}



题解:洛谷 CF25E Test 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。都是这个字符串的子串,并使这个字符串最短。输出最短字符串的长度。$ s_1,s_2,s_3长度\le100000$本文分享的必刷题目是从。#提高+# #KMP#,试求一个字符串,使。 阅读详情

相关推荐

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4476

CF25E Test

传送门:https://www.luogu.org/problemnew/show/CF25E 做法:字符串哈希 不过似乎kmpkmpkmp也能做 分类讨论两字符串ABA BAB合并的情况: 1.BBB为AAA的子串 直接枚举BBB在AAA中的位置,哈希判断即可 2.AAA为BBB的子串 这里由于偷懒,就没写,在暴力枚举时枚举多一些情况 3.ABA BAB有相同长度的前缀和后缀 枚举前...

蒟蒻Steven_Meng的博客 287

从病毒分析到安全研究:手把手教你用OD破解加壳程序的反调试机制

本文深入探讨了如何识别并绕过加壳程序的反调试机制,特别是针对使用IsDebuggerPresent等API检测的防护手段。通过实战案例和工具链配置,详细介绍了逆向工程中的关键技巧,包括内存补丁、硬件断点定位OEP等,帮助安全研究人员有效突破软件保护技术。

tgb345678的博客 823

SP7155 CF25E - Test (kmp&暴力)

SP7155 CF25E - Test (kmp&暴力) 题意 求包含三个字符串为子串的最短串长度。 思路 预处理两两字符串kmp匹配的最大长度。 然后暴力跑,分四种情况计算答案。 代码 // Problem: E. Test // Contest: Codeforces - Codeforces Beta Round #25 (Div. 2 Only) // URL: https://codeforces.ml/contest/25/problem/E // Memory Limit: 256 M

Harris-H的博客 605

智能体在车联网中的应用:第31天 基于RLlib的多智能体PPO实战:MAPPO算法解决simple_spread合作任务

本文介绍了如何利用RLlib框架实现多智能体强化学习算法MAPPO,解决simple_spread任务。首先分析了RLlib的架构设计理念和多智能体支持特性,包括策略映射、环境包装等核心组件。然后详细解析了simple_spread环境的任务定义、观察空间和奖励函数设计。最后回顾了MAPPO算法原理,说明其如何在RLlib中实现集中式训练与分布式执行的CTDE范式。文章提供了完整的安装指南和环境配置方法,帮助读者快速搭建多智能体强化学习实验环境。

IT深耕十余载,大道之简 1332

MIUI升级后录音神秘消失?别慌!手把手教你从Android/data目录找回宝贵录音文件

本文详细解析了MIUI升级后录音文件消失的原因,并提供了从Android/data目录找回录音文件的实用指南。通过技术分析和步骤演示,帮助小米手机用户解决录音文件丢失问题,同时分享预防措施和高级恢复方案,确保重要录音数据安全。

weixin_30696427的博客 281

Gym - 101466E ​​​​​​​ Text Editor(KMP求子串出现次数 + 二分大法)

Text Editor One of the most useful tools nowadays are text editors, their use is so important that the Unique Natural Advanced Language (UNAL) organization has studied many of the benefits working wi...

Error Man 的博客 477

【Pytorch教程】:卷积神经网络 CNN

Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知

nanke_4869的博客 8087

周结——(CFdiv 3+ KMP)

这一周做了下学期的第一次CF,做的不是很好,比赛的总结呢 在这儿呢! 就不说了,再说一说这周主要看的一个算法吧! KMP算法 这个算法就是给你两个字符串,让你判断第一个字符串中是否包含第二个字符串。按照常规的方法也能够找,大体思路就是从头开始找,没找到再从第二个开始找,找不到再从第三个开始找~~~~。原本觉得这么算也不是不行,除了比较耗时间以外。但是算法不就是为了简化时间和空间的嘛,况且这个类型的题也做过好多次了所以看见这个算法就马不停蹄的开始涉及了, 算法描述: 这个算法其实是通过找最长公共前后缀,来实现

qq_51769081的博客 341

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 202

6.4 直流无刷电机(BLDC):测试与性能评估

本文系统阐述了直流无刷电机(BLDC)的测试与性能评估方法,涵盖参数测量、性能测试、测试平台设计及可靠性评估。详细介绍了绕组电阻、电感和反电动势的测量原理与修正方法,以及转矩-转速特性、效率分析和动态响应测试的技术要点。通过搭建高精度测功机系统,结合自动化数据处理,实现对电机性能的全面评估。最后讨论了温升、振动、EMC等特殊测试方法,为BLDC电机的设计验证和质量控制提供了完整的技术路径。

技术工作者 442

洛谷 CF25E Test(KMP)

#include <bits/stdc++.h> #define dbg(a) cout<<#a<<" : "<<a<<endl using namespace std; const int N=1e5+5; char s[4][N]; int f[4][N]; int minn=1e9; void getfail(char *s,int id) { f[id][0]=f[id][1]=0; int len=strlen...

C_Dreamy的博客 487

Android14 Qcom 从Framework到Driver带你打开WIFI(二)

上篇文章讲到了UI打开WIFI以后,逐步调用到加载底层驱动以及通知等相关流程。这篇接着上文继续往下看WIFI ON的后续动作。

IAYLBL的博客 765

字符串哈希+KMP

KMP 还没有调出来。

2403_88875937的博客 351

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

CF25E:Test——题解

https://vjudge.net/problem/CodeForces-25E 题目大意:给三个字符串,求最小串,使得前三个串都是它的子串。 ———————————————— 这题虽然是看哈希的时候做的,但上网一查啊全是KMP。 所以果断用KMP做啦! (话说网上的题解长得都一模一样一个字都没改所以就不贴了) 对于三个串共六种排法,排列组合一下然后在把他们重合的部分减去就会是答案。...

weixin_34313182的博客 208

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

CF #93 div1 B. Password KMP/Z

题目链接:http://codeforces.com/problemset/problem/126/B 大意:给一个字符串,问最长的既是前缀又是后缀又是中缀(这里指在内部出现)的子串。 我自己的做法是用KMP的next数组,对所有既是前缀又是中缀的位置计数,再从next[n]开始走next,也即枚举所有既是前缀又是后缀的子串,看cnt[i]是否大于0,如果大于0则说明作为中缀出现过(也即有大于...

weixin_30521649的博客 191

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

常用算法代码模板与题单 | F - 字符串(更新于2026.10.7)

这篇文档其实是我自己学习路上的一份“复习笔记”。之前看了不少教程,零零散散记了一堆代码片段和小技巧,时间久了就容易忘,翻起来也麻烦。所以干脆花时间整理了一下,把常用的模板、容易踩的坑、还有一些个人觉得挺实用的小技巧都归到了一起。 如果你也在学类似的东西,或许能帮你省下一些翻找的时间;如果有哪里写得不清楚或不对,也欢迎随时指正交流。 希望这份整理也能对你有一点点帮助~ ✨

团爸讲算法 232

CF25E 字符串哈希/KMP

题意: 给定三个串,求包含这三个串的总串的最小长度。 思路: 字符串哈希。 当然,也可以用KMP,然而我自己没有想到,看来对KMP的理解仍然不够深。 这里也引用一下其他博主的KMP做法。 http://blog.youkuaiyun.com/u011345136/article/details/38400395 实现:#include <bits/stdc++.h> using namespace

ACUNSTOPPABLE 806

CF25E-Test【AC自动机,bfs】

正题 题目链接:https://www.luogu.com.cn/problem/CF25E 题目大意 给出三个串,然后求一个最短的串包含这三个串。 1≤∣s1∣,∣s2∣,∣s3∣≤1051\leq |s_1|,|s_2|,|s_3|\leq 10^51≤∣s1​∣,∣s2​∣,∣s3​∣≤105 解题思路 把三个串状压,先跑出ACACAC自动机和每个节点包含的串的状态。 然后设fi,sf_{i,s}fi,s​表示目前到节点iii,已经包含串的状态是sss,然后bfsbfsbfs转移即可。 时间复杂度

QuantAsk 449

《CF25E Test》

问题要求找到包含三个给定字符串 s1, s2, s3 的最短字符串,并输出其长度。通过合并字符串并寻找最大重叠部分来减少总长度。代码实现中,首先定义了一个 merge 函数,用于合并两个字符串并返回最短结果。然后,通过排列组合所有可能的字符串顺序,计算每种情况下的最短合并字符串长度,最终输出最小值。该方法的时间复杂度较高,但适用于小规模输入。

Jasmine_llq的博客 593

CF 149E Martian Strings(KMP)

转载请注明出处,谢谢http://blog.youkuaiyun.com/ACM_cxlove?viewmode=contents    by---cxlove   题意:给了一个母串,然后有多个匹配串,问在母串中是否能找到不重叠两个子串,拼接成匹配串 http://codeforces.com/problemset/problem/149/E   我的做法是,对于每一个匹配串 正向KMP一次,记

窝不是爱酱,喵~~~~ 1986

CF 631D KMP运用

D. Messenger time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standard output Each employee of the "Blake Techologies" compa

勇敢前进的ACMer 605

CF 432D(kmp)

D. Prefixes and Suffixes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You have a strings = s1s2......

weixin_30315723的博客 154
上一篇: CF-25D - Roads not only in Berland(并查集或者搜索)
下一篇: hdu 1421 搬寝室(DP)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值