首页 > 其他分享 >P3375 【模板】KMP

P3375 【模板】KMP

时间:2024-04-26 16:57:15浏览次数:23  
标签:pi string get int text vector KMP P3375 模板

https://www.luogu.com.cn/problem/P3375

#include<bits/stdc++.h>
using namespace std;
const int N=1e7+5;
vector<int> get_pi(string s){
	int n=s.length();
	vector<int> pi(n);
	for(int i=1;i<n;++i){
		int j=pi[i-1];
		while(j&&s[i]-s[j])j=pi[j-1];
		if(s[i]==s[j])j++;
		pi[i]=j;
	}
	return pi;
}
string s,sl;
vector<int> get_id(string text,string pattern){
	string cur=pattern+'#'+text;
	int lent=text.size(),lens=pattern.size();
	vector<int> v;
	vector<int> lps=get_pi(cur);
	for(int i=lens+1;i<=lent+lens;++i){
		if(lps[i]==lens)v.push_back(i-2*lens);
	}
	return v;
}
int main(){
	cin>>s>>sl;
	vector<int> id=get_id(s,sl);
	for(int i=0;i<(int)id.size();++i)printf("%d\n",id[i]+1);
	vector<int> st=get_pi(sl);
	for(int i=0;i<st.size();++i)printf("%d ",st[i]);
	return 0;
}

标签:pi,string,get,int,text,vector,KMP,P3375,模板
From: https://www.cnblogs.com/0shadow0/p/18160414

相关文章

  • Vsphere中ubuntu带桌面模板安装vmtools
    ①编辑虚拟机设置如果有读ISO文件,将其改为“客户端设备”。 ②选择"安装vmwaretools",选择"挂载"或者“是" ③进入虚拟机,发现”media/用户名/”下出现VMwareTools文件夹。sudosu切换为root,在/下新建一个文件夹,将文件夹下的tar.gz包,复制到该文件夹下,并解压缩。④进入......
  • 洛谷题单指南-动态规划2-P1439 【模板】最长公共子序列
    原题链接:https://www.luogu.com.cn/problem/P1439题意解读:求最长公共子序列的长度。解题思路:1、O(n^2)的方法:动态规划设两个排列为a,b设dp[i][j]表示a[1~i]与b[1~j]的最长公共子序列长度根据公共子序列结尾是否包含a[i]、b[j]是否相等分情况讨论:如果a[i]==b[j]  则结尾......
  • Ubuntu 24.04 LTS x86_64 OVF (sysin) - VMware 虚拟机模板
    Ubuntu24.04LTSx86_64OVF(sysin)-VMware虚拟机模板Ubuntu24.04LTS(GNU/Linux6.8-genericx86_64)请访问原文链接:Ubuntu24.04LTSx86_64OVF(sysin)-VMware虚拟机模板,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org无耻抄袭者YuTao请远离本站!!!......
  • 类模板的常见用法
    class_template类模板和函数模板的定义和使用类似,我们已经进行了介绍。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同。类模板用于实现类所需数据的类型参数化template<classNameType,classAgeType>classPerson{public: Person(NameTypename,AgeTypeage) { ......
  • [题解]P5656 【模板】二元一次不定方程 (exgcd)
    P5656【模板】二元一次不定方程(exgcd)若存在\(ax+by=c\),则可以根据特解\(x,y\)求出任意通解\(x',y'\):\(\begin{cases}x'=x+k*\frac{b}{\gcd(a,b)}\\y'=y-k*\frac{a}{\gcd(a,b)}\end{cases}(k\in\mathbb{Z})\)求特解的方法是「扩展欧几里得(exgcd)」,如果没接触过可以先阅读......
  • wpf DataTemplate 动态模板内容
     <DataGridTemplateColumnWidth="50"Header="选择">              <DataGridTemplateColumn.CellTemplate>                <DataTemplate>                       ......
  • phpcms pc:get 标签用法;phpcms模板中使用PHP标签
     注意:变量 $catid 需要是从控制器里解析出来的<divclass="show-right-top"><divclass="sch-recruit-right-title"><p><imgsrc="/statics/boot/images/quan3.png">快速链接</p></div>......
  • [题解]P5431 【模板】模意义下的乘法逆元 2
    可恶,卡常好难受。P5431【模板】模意义下的乘法逆元2将分数通分,第\(i\)个分数是\(\frac{k^i*fac\diva[i]}{fac}\),\(fac\)表示所有元素的积。我们可以用\(lr,rl\)记录\(a\)的前缀后缀积,第\(i\)个分数就是\(\frac{k^i*lr[i-1]*rl[i+1]}{lr[n]}\)。这样分母都是\(lr[n]\),分子就......
  • 【模板】分解质因数 Pollard-Rho
    参见洛谷模板题题解,这里只有代码实现。一些强数据参考(输出了最大质因子)79223372036854775783Prime9223371994482243049303700049392232532901085832072097143214748364822147483647Prime21471175694633721417005691289#include<bits/stdc++.h>usingnamespace......
  • 模板
    什么是模板模板是一种通用的编程工具,允许程序员编写通用的类或函数,以便在不同的数据类型上进行操作。模板可以让程序员编写一次代码,然后根据需要在编译时生成特定类型的代码实例。这种特性统称为泛型编程。voidSwap(int&a,int&b){ inttemp=a; a=b; b=temp;}v......