首页 > 其他分享 >Prefix of Suffixes

Prefix of Suffixes

时间:2024-09-25 20:34:46浏览次数:10  
标签:后缀 int nx fa Prefix ans 300005 Suffixes

  • 为什么求Z函数的过程又被称为【扩展KMP】呢?因为KMP算法是可以求出哪些后缀能与前缀完全匹配的,而Z函数则对于那些不能完全匹配的后缀,求出了最大的匹配长度
  • 现在你已经将问题转化为:在未被标记的后缀中,快速锁定当前新增的字符会使得哪些后缀失配
  • “未被标记”太抽象了,回溯这个条件——在【当前能与前缀完全匹配的后缀中】,这不就是【KMP】求的东西嘛!
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int s[300005],a[300005],b[300005];
int nx[300005],fa[300005];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;
	cin>>n;
	long long sum=0,ans=0;
	for(int i=1;i<=n;i++)
	{
		cin>>s[i]>>a[i]>>b[i];
		s[i]=(s[i]+ans)%n;
		if(fa[i-1]&&s[fa[i-1]+1]==s[i])
		{
			fa[i-1]=fa[fa[i-1]];//要等s[i]出现以后才能判断
		}
		sum+=b[i];
		if(i==1)
		{
			nx[1]=0;
			fa[1]=0;
		}
		else
		{
			int j=nx[i-1];
			while(j&&s[j+1]!=s[i])
			{
				j=nx[j];
			}
			if(s[j+1]==s[i])
			{
				j++;
			}
			nx[i]=j;
			fa[i]=j;
		}
		int j=nx[i-1];
		while(1)
		{
			if(s[j+1]!=s[i])
			{
				int id=i-j;
				sum-=b[id];
				if(j==0)
				{
					break;
				}
				j=nx[j];
			}
			else
			{
				if(j==0)
				{
					break;
				}
				j=fa[j];
			}
		}
		ans=ans+sum*a[i];
		cout<<ans<<"\n";
	}
	return 0;
}

标签:后缀,int,nx,fa,Prefix,ans,300005,Suffixes
From: https://www.cnblogs.com/watersail/p/18432137

相关文章

  • CF2013E prefix gcd
    给n个数,随意排序,所有前缀的gcd的和的最小值。只想到gcd变化是log次的,所以枚举每个作为开头,然后找让gcd变小的接上。可是这样是\(O(n^2)\).注意,最小的数要放最前面。假设\(x,a_1,a_2....\)和\(a_1,a_2,x...\).(x是最小的)我们有\(x+gcd(a_1,x)\leqa_1\),因为gcd的求法是\(a_......
  • CF1810G The Maximum Prefix 题解
    Description构造一个长度最多为\(n\)的数组\(a\),其每个元素均为\(1\)或\(-1\)。生成方式如下:选择任意整数\(k\in[1,n]\)作为\(a\)的长度。对于\(\foralli\in[1,k]\),有\(p_i\)的概率设\(a_i=1\),有\(1-p_i\)的概率设\(a_i=-1\)。在数列被生成后,计算\(s_i=a......
  • 题解:SP3109 STRLCP - Longest Common Prefix
    三倍经验:UVA11996JewelMagicP4036[JSOI2008]火星人题意维护一个字符串\(S\),支持以下操作:\(Q\i\j\):输出\(\operatorname{LCP}(S[i\dotsl],S[j\dotsl])\)\(R\i\char\):用\(char\)替换\(S\)的第\(i\)个字符\(I\i\char\):在\(S\)的第\(i\)......
  • TCPIP路由技术第一卷 第三大部分-5 Prefix-list和扩展ACL
    r1:routerripredistribute-listprefix1outs1/1ipprefix-list1permit44.1.1.0/24ipprefix-listnamepermit172.16.0.0/22ge24le24/22前缀22bit相同ge24掩码范围最小24位.当没有ge(172.16.0.0/22),掩码范围最小值跟前缀相同le24(172.16.0.0/22le24)掩码范......
  • Strings, Subsequences, Reversed Subsequences, Prefixes
    题目大意给定两个字符串s和t,求出在s里面有多少个本质不同的子序列,使得该序列的前缀包含t,且该序列的反串也包含t即s的子序列=t+x+反t‘首先要确定是否有,就是判断我的S字符串中有没有包含T字符串for(l=0;l<n;l++){ if(s[l]==t[num])num++; if(num==m)bre......
  • Mybatis-Plus中的@TableName 和 table-prefix
    简介本文介绍Mybatis-Plus中的@TableName和table-prefix的使用。介绍在MyBatis-Plus中,@TableName注解和table-prefix配置都可以用来指定表名,但它们的作用方式略有不同。table-prefix配置table-prefix是一个全局配置,它会自动在所有表名前添加指定的前缀,这个配置对于......
  • 2024-08-03:用go语言,给定一个从 0 开始的字符串数组 `words`, 我们定义一个名为 `isPref
    2024-08-03:用go语言,给定一个从0开始的字符串数组words,我们定义一个名为isPrefixAndSuffix的布尔函数,该函数接受两个字符串参数str1和str2。当str1同时是str2的前缀和后缀时,函数返回true;否则返回false。例如,isPrefixAndSuffix("aba","ababa")返回true,因为"ab......
  • 易优CMS模板标签SQL数据查询查询数据表ey_arctype,指定栏目ID的基本信息,不使用数据缓存
    【基础用法】标签:sql描述:用于获取MySQL数据库内容的标签。用法:{eyou:sqlsql=''cachetime='3600'empty='没有数据'}{$field.数据表相应的字段名称}{/eyou:sql}属性:sql=''需要查询的SQL语句cachetime='3600'数据缓存时间,默认缓存25小时,即86400秒empty=''没有数据时显示......
  • [POI2012] PRE-Prefixuffix 题解
    前言题目链接:洛谷。题意简述给出长为\(n\)的串\(\texttt{S}\)。求最大的\(l\)满足:\[2l\leqn\land\texttt{S}[1\ldotsl]\doteq\texttt{S}[n-l+1\ldotsn]\]其中\(\doteq\)表示循环相同。题目分析看到循环相同,套路化想到,两个字符串一定可以表示成\(\tex......
  • 配置文件mybatis-plus: global-config: db-config: table-prefix: true
    具体来说,table-underline的含义是:当table-underline设置为true时:假设你有一个实体类名为UserInfo,那么MyBatis-Plus会默认去数据库中寻找名为user_info的表(即,驼峰命名法自动转换为下划线命名法)。同理,如果你的数据库表名是user_info,但你的实体类名是UserInfo,那么M......