Codeforces 536B Tavas and Malekas kmp找所有与前缀匹配的后缀

Keil MDK安装NRF52832开发环境全攻略(附系统时间错误解决方案) 本文详细介绍了如何使用Keil MDK搭建NRF52832开发环境,包括基础软件安装、项目配置关键步骤以及常见问题解决方案。特别针对系统时间错误导致的编译失败问题提供了实用解决方法,帮助开发者快速上手NRF52832开发。 阅读详情

题目链接

题意

有只含小写字母的字符串 T ,其中出现了若干次字符串 P,并升序给出其中一部分 P 的起始位置,要求 T 有多少种不同的可能。

思路

就是找有多少空缺位置 k ,答案就是 26k.

按顺序把 P 往 T 中填充,同时记录空缺位置。此时需要判断是否与之前已填充的部分矛盾,其实就是判断给定的 P 的前缀与后缀是否匹配。

直接比较显然会 tle. 故应预处理出 P 的所有与前缀相匹配的后缀的位置。这里就要再一次用到 fail 数组。

考虑 fail[len] 的含义,意味着串
A: [0..fail[len]−1]
与
B: [len−fail[len],len−1]
匹配。
所以 len−fail[len] 位置处与前缀匹配。

再沿着 fail[len] 往前跳,记 fail[len]=k ,于是跳到 k 位置处。
fail[k] 的含义为串
A: [0..fail[k]−1]
与
B: [k−fail[k],k−1]
匹配,
而
B: [k−fail[k],k−1]
与
C: [k−fail[k]+len−k,len−1]
匹配,
所以 k−fail[k]+len−k=len−fail[k] 位置处与前缀匹配。

这样迭代下去, P 的所有与前缀相匹配的后缀的位置就能找到了。

Code

#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
typedef long long LL;
const LL mod = 1e9+7;
set<int> st;
int f[maxn], n, m, a[maxn], len;
char s[maxn], P[maxn];
LL poww(LL a, LL b) {
    LL ret = 1;
    while (b) {
        if (b & 1) (ret *= a) %= mod;
        (a *= a) %= mod;
        b >>= 1;
    }
    return ret;
}
void getfail() {
    f[0] = f[1] = 0;
    for (int i = 1; i < len; ++i) {
        int j = f[i];
        while (j && P[j] != P[i]) j = f[j];
        f[i+1] = P[i] == P[j] ? j+1 : 0;
    }
    int temp = len;
    while (f[temp]) {
        st.insert(len - f[temp]);
        temp = f[temp];
    }
}
void getdata() {
    printf("%s\n", P);
    for (int i = 0; i < m; ++i) printf("%d ", a[i]+1);
}
int main() {
    freopen("in.txt", "r", stdin);
    scanf("%d%d%s", &n, &m, P);
    len = strlen(P);
    getfail();
    int cur = 0, emp = 0;
    bool flag = false;
    for (int i = 0; i < m; ++i) scanf("%d", &a[i]), --a[i];
    for (int i = 0; i < m; ++i) {
        if (cur <= a[i]) {
            emp += a[i] - cur;
            cur = a[i] + len;
        }
        else {
            if (st.count(len-(cur-a[i]))) cur = a[i] + len;
            else {
                flag = true;
                break;
            }
        }
    }
    emp += n - cur;
    if (flag) printf("0\n");
    else printf("%I64d\n", poww(26, emp));
    return 0;
}

后记

不知道为什么一直 tle,后来发现写的时候不知道为什么每次都把 P 给 strcpy 到了相应的位置…不 T 才有鬼(x

第一百三十九回 介绍三个BLE包 本章回中主要介绍了Flutter中BLE的概念和操作方法,主要介绍了三个BLE包的功能和差异,以方便大家在BLE操作中选择不同的包。 阅读详情

相关推荐

从零开始掌握RDMA拥塞控制:原理、算法与实战解析

本文深入解析了RDMA拥塞控制的核心原理与实战配置。RDMA依赖无损网络保障高性能,其关键在于PFC与ECN两大技术协同防止丢包。文章重点剖析了主流算法DCQCN的工作机制与参数调优,并简要介绍了HPCC与TIMELY等前沿算法。最后提供了在Linux上配置RoCEv2与DCQCN的详细步骤及性能调试方法,帮助读者从零构建稳定的RDMA网络环境。

weixin_28452161的博客 136

Codeforces 536B Tavas and Malekas 求自身首尾的重叠位置 KMP

题目链接:点击打开链接 题意: 用小写字母构造n长的串S,m个要求 字符串P 下面m个位置。a1, a2···am(输入有序) 要使得字符串S的以ai 开头且后面是一个P串。 问构造的方法数 思路: 实际上,对于ai, ai+1 ,两个位置,如果这两个位置会相互影响(即 ai+1 - ai 复制一个和P一样的串P‘ 把P放在ai位置,把P‘放在ai+1位置,那么只需要判断一下

九野的博客 1643

MaixCAM2 4K AI相机硬件解析与开发实战

嵌入式AI视觉开发中,边缘计算设备的选择直接影响项目落地效果。以NPU为核心的AI加速技术通过专用指令集优化,可在低功耗下实现10+TOPS算力,典型应用包括工业质检、智能门禁等实时场景。MaixCAM2作为新一代4K AI相机,搭载AX630 SoC芯片,其双核Cortex-A53与NPU的异构架构,在运行YOLOv11n模型时可达113FPS,显著优于传统方案。开发时需注意模型量化部署技巧,如INT8量化需500+张校准图片覆盖多光照条件,避免准确率下降。设备扩展性方面,PMOD接口支持热成像、ToF传

weixin_30819085的博客 690

前后缀匹配问题kmp

首先A和B合并他们一定是首尾重叠相连,要求合并后字典序最小,所以当合并后串长度一样时,我们要把A或B中字典序小的放在前面。        然后计算A的后缀和B的前缀匹配长度为len1,计算A的前缀和B的后缀匹配长度为len2。        如果len1大,那么就把A放前面。如果len2大,那么就把B放前面。 这样才保证了长度最小啊 这个题return的位置不同于判断子串问题,这个是获取匹配...

lanshan1111的博客 816

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1282

SSE(Server-Sent Events)完整使用示例

本篇使用Node.js 作为服务端,在浏览器客户端演示SSE的完整实例和演示。实现了一个基于 Server-Sent Events (SSE) 的实时数据推送功能。

oscar999的专栏 750

字符串匹配的KMP算法--前缀和后缀的详解

字符串匹配的KMP算法 作者: 阮一峰 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的

Wait for 的专栏 3万+

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 239

U - Seek the Name, Seek the Fame

Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u [Submit]   [Go Back]   [Status] Description

mr_lee 632

Level 4自动驾驶系统设计49——L4 架构设计 2

在 9.3.2 节所述的 SerDes 晶圆级原生“双出(Splitter Mode)”物理架构中,若解串芯片内部的其中一路 MIPI 供电轨因大算力 SoC 1 的高热漏电流污染突发二阶瞬态电磁耦合,导致双出通道产生 $\mathbf{\Delta} \text{Skew} \ge 15\text{ps}$ 的时序偏置。其中,$\mathbf{H}(t)$ 为最低限度生存网雷达几何测量的观测矩阵,$\mathbf{R}_{\text{fallback}}$ 为清洗后的雷达测量不确定度协方差。

Godspeed_zwh的博客 309

Pytorch实现之SRGAN+CBAM的结构设计

在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。

LJ1147517021的博客 571

codeforces 536B Tavas and Malekas - Z-Box算法

传送门 题解:模板题 #include #include #include #include #define mod 1000000007 #define N 1000010 #define lint long long using namespace std; char s[N];int z[N],n,x[N],cnt[N]; inline bool can(int x,int y) {

Mys_C_K的博客 493

【麒麟系统】Rsync文件复制与同步工具

本文摘要: Rsync是一款Linux/Unix系统标配的高效文件同步工具,支持增量传输、SSH加密、断点续传等核心功能,相比SCP具有显著优势。文章详细解析了Rsync的五种标准语法格式和常用参数组合,重点介绍了本地同步、远程SSH同步(推送/拉取)的实操方法,并提供了密钥免密登录配置方案。针对企业运维场景,还讲解了文件过滤、镜像同步(--delete)、迁移同步(--remove-source-files)、空运行预校验(--dry-run)等高级功能,以及带宽限速等优化技巧,帮助用户安全高效地完成各类

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 998

CodeForces 536B Tavas and Malekas :构造长为n的串,使m个串的开头是给定的某个字符串,求构造方案数 kmp/hash...

本题的难点在于--->看懂题意 因为比赛纠结于A的二分,比赛还没结束就暴走睡觉了TUT今天起来看了看B===卧槽题意和A一样恶心啊有木有== 回到本题,看明白之后首先映入眼前的就是--->暴力大法好 这样必然是可以hack超时的,必须要对串进行处理哪些后缀和前缀相等 最常规的莫过于kmp里面的next,从结尾一直next找找找到找不到,那些地方表示和后缀相同,这个和之前做过的h...

weixin_34319111的博客 295

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

字符串匹配的KMP算法(部分匹配表:前缀---后缀)

字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。 这种算法不太容易理解,网上

单向街的夏天 6299

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Codeforces Round #536 (Div. 2)解题报告(有待更新)

题目链接:http://codeforces.com/contest/1106 第一题: #include&lt;bits/stdc++.h&gt; using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)&lt;(z);(x)++) #define ll long long...

满月照亮的路 419

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Codeforces 536A Tavas and Karafs 二分+结论

题目链接:点击打开链接 题意:有一个等差数列,从A开始,公差为B 然后n个询问。。。每个询问给定l,t,m 然后要求如果每次可以最多选择m个数,使这m个数-1,那么在t次操作中可以使l为左端点的最长序列中使所有数为0 思路: 枚举答案判可行就好了。 有一个结论,就是只要最大的数 #include #include #include #include #incl

九野的博客 1584

CodeForces Round#536(Div2) 部分题解

原来是农历新年专场,但是CF卡的不行。。。始终无法log in。 只能看题目假装自己在OJ。又是八点半的场次。。忘记了时间。 粗略写了两题,今天早上交了AC。   A. Lunar New Year and Cross Counting   题目大意: 简单的字符查找,找一个图案。直接暴力,本来以为会卡时间,但是也过了。 #include &lt;iostream&gt; u...

Sensente的博客 302

Codeforces 432D Prefixes and Suffixes(KMP+dp)

题目连接:Codeforces 432D Prefixes and Suffixes 题目大意:给出一个字符串,求所有既是前缀串又是后缀串的字符串出现了几次。 解题思路:根据性质可以根据KMP算法求出所有的前后缀串,然后利用dp求解,dp[i]表示从1到i这个子串出现过的次数。转移方程dp[jump[i]]+=dp[i]。任意一个dp[i]的初始状态应该是1。 #include #

不慌不忙、不急不躁 2687

cf#299 Tavas and Malekas

传送门在这里 题意:给出一个字符串的一个子串,告诉你子串在某些位置和原串匹配,求一共有多少可能的原串 思路:其实就是要判断给出子串的所有前缀和后缀哪些是相等的。 首先kmp的next数组求的是所有前缀子串(a1  a1a2  a1a2a3...)中长度最大的前缀和后缀的长度, 设字符串长度为len,那么next[len]得到的是整个字符串中长度最长的相等的前缀和后缀,并且可知,所有起始位置

学如逆水行舟千帆过 657

Codeforces Round #536 (Div. 2) 6/6

A 暴力 #include &lt;bits/stdc++.h&gt; using namespace std; int a[1000][1000]; int main() { int n; cin &gt;&gt; n; for (int i = 1; i &lt;= n; ++i) { string s; cin &gt;&gt; s; for (int j = 0; ...

BPM136(BPMThor) 228

【Codeforces536D】Tavas in Kansas

题意: 给你一张nn个点mm条边的无向图,每个点有一个点权pip_i(存在负数) 有两个人在进行游戏,他们分别在ss、tt号点。 两个人轮流操作,每次操作选出一个非负整数xx,表示将到他们所在点最短距离小于等于xx的点的点权拿走。(拿走后点权消失,且每次拿走的有点权的点的个数至少为1) 询问最后胜负情况(谁的总点权和较大)。 n≤2000,n−1≤m≤100000n \leq 2000,n-1 \l

wzf_2000的博客 525

Password(CodeForces-126B)(KMP算法变形,字符串Dp,Hash)

文章目录前言题目思路代码 前言 这里的Dp定义很容易和KMP的Fail数组搞混… 题目 传送门: CodeForces Vjudge 题目大意: 你现在有一个长度为n的字符串S,现在让你求它的一个最长子串T使其既为S前缀,又为S后缀,并且在S中非前缀非后缀中出现过一次 数据范围: 1≤n≤1061 \le n \le 10^61≤n≤106 思路 思路很简单,定义: Dp[i]为i为末尾的子串的后...

Mouse_liang的博客 772

Codeforces Round #536 (Div. 2) A B C D E(dp)

这可能是我做div2div2div2以来做的最好的一次?它居然unratedunratedunrated了!哼╭(╯^╰)╮不给力的服务器!关键时刻拓机!虽然这次的D比较水。但是是我一次过了四题QAQ… A. Lunar New Year and Cross Counting 题解:数交叉XXX个数,O(N2)O(N^2)O(N2)枚举中点即可。 代码 #include&amp;lt;bits/stdc+...

Eternally831143的博客 495

KMP算法(二)(前缀表与具体实现)

KMP算法(一)(与暴力算法对比及主要思想) 书接上文 在(一)中我们讲到了,KMP算法与暴力算法对比的优点就在于特殊前缀表(这节我们称为next数组)的存在使得我们在匹配失败时,不需要再一个一个从头开始,而是根据特殊前缀表直接匹配对应位置,节省时间。 这节我们主要来讲解前缀表构建的思路及如何代码实现。 前缀表 对于讲解前缀表,大多数教材会选择直接介绍next数组,next数组可以算的上是一个经过一步特殊操作的前缀表,以下也会提到 构建思路 前缀表的定义在(一)中有,不在赘述。 本节不在写表头,以前缀值代表

LateNight_LL的博客 3460

Solr中的前缀和后缀匹配

搜索引擎都是关于查找字符串的。 用户输入一个查询词,然后从反向索引中检索它。 有时,用户正在寻找的值只是索引中值的子字符串,并且用户可能也对这些匹配感兴趣。 对于德语这样的包含复合词(例如Semmelknödel)的语言,这尤其重要,其中Knödel表示饺子,而Semmel专门介绍这种词。 通配符 为了演示方法,我使用了非常简单的模式。 文档由一个文本字段和一个ID组成。 在Github...

最佳 Java 编程 1026
上一篇: HDU 4125 Moles 二叉排序树 树状数组 kmp
下一篇: Codeforces 526D Om Nom and Necklace 循环节 kmp
kkkkahlua
博客等级 码龄12年 4粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值