Jzoj3756 【NOI2014】动物园

【计算摄影】相机成像原理:从光到JPEG图像 本文我们将从最基本的相机成像原理开始论述,再讨论光线进入相机后,经过一系列处理成为JPEG图像的大致流程。 阅读详情

下课前,园长提出了一个问题:“KMP 算法只能求出 next 数组。我现在希望求出一个更强大 num 数组——对于字符串 S 的前 i 个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i]。例如 S 为 aaaaa,则 num[4] = 2。这是因为 S 的前 4 个字符为 aaaa,其中a 和 aa 都满足性质‘既是后缀又是前缀’,同时保证这个后缀与这个前缀不重叠。
而 aaa 虽然满足性质‘既是后缀又是前缀’,但遗憾的是这个后缀与这个前缀重叠了,所以不能计算在内。同理,num[1] = 0,num[2] = num[3] = 1,num[5] = 2。 ”
最后,园长给出了奖励条件,第一个做对的同学奖励巧克力一盒。听了这句话,睡了一节课的企鹅立刻就醒过来了!但企鹅并不会做这道题,于是向参观动物园的你寻求帮助。你能否帮助企鹅写一个程序求出 num 数组呢?
特别地,为了避免大量的输出,你不需要输出 num[i] 分别是多少,你只需要输出∏ (num[i] + 1) 对 1,000,000,007 取模的结果即可。
其中∏ (num[i] + 1)=1= (num[1] + 1) × (num[2] + 1) × ⋯ × (num[L] + 1)。

到头来还是到卡常题。。。

本来应该老老实实地用两次kmp的,偏偏写了一个SAM

当然也不难写,不过是在线在parent树上面做倍增而已(插入一个做一次倍增求答案)

我们对于新加入的节点np,只考虑它所有祖先中,sz[p]>0的节点(因为只有这些节点是串的前缀)

倍增到一个最深的节点p使得mx[p]*2<=mx[np]即可

因为只考虑sz[p]>0的祖先,所以求f[x][0]可以O(1),总体复杂度O(tNlogN)

让后开始无限卡常,用尽所学手段但是卡到现在依然没过,放弃。。。。。。

(讲道理,以前jz的机子都是跑的比我的电脑快的啊怎么今天比我这里还慢呢。。。1.2s怎么都卡不了啊)

#pragma GCC opitmize("O2")
#pragma G++ opitmize("O2")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 2000010
#define M 1000000007
using namespace std;
char str[N]; long long ans=1;
int s[N][26],mx[N],sz[N],f[N];
int n,lst=1,cnt=1,a[20][N]; 
inline int extend(int c){
	register int p=lst,np=lst=++cnt,q,nq;
	mx[np]=mx[p]+1; sz[np]=1;  memset(s[cnt],0,26<<2);
	for(;p&&!s[p][c];p=f[p]) s[p][c]=np;
	if(!p) { f[np]=1; goto end; }
	q=s[p][c];
	if(mx[q]==mx[p]+1) f[np]=q;
	else{
		nq=++cnt;
		mx[nq]=mx[p]+1;
		f[nq]=f[q]; f[q]=f[np]=nq;
		memcpy(s[nq],s[q],26<<2);
		for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;
		p=f[nq]; a[0][nq]=sz[p]?p:a[0][p];
		for(int j=1;j<19;++j) a[j][nq]=a[j-1][a[j-1][nq]];
	}
	end:sz[np]+=sz[p=f[np]]; 
	a[0][np]=sz[p]?p:a[0][p];
	for(int j=1;j<19;++j) a[j][np]=a[j-1][a[j-1][np]];
	p=np;
	for(int j=18;~j;--j)
		(mx[a[j][p]]<<1)>mx[np]?p=a[j][p]:0;
	p=a[0][p];
	p!=np?ans=ans*(sz[p]+1)%M:0;
}
int _18520(){
	memset(sz,0,sizeof sz);
	memset(s[1],0,26<<2); 
	scanf("%s",str+1); n=strlen(str+1);
	for(int i=1;i<=n;++i) extend(str[i]-'a');
	printf("%lld\n",ans);
}
int main(){
	int T; scanf("%d",&T);
	for(;T--;_18520())ans=cnt=lst=1;
}

matlab 计算InSAR干涉相位图的残差点 在理想的情况下,相位场是连续的,图像内沿着任何一条封闭曲线的积分应该为零。这样的连续场称为无旋场,反之为有旋场。但在实际测量过程中,由于噪声、欠采样和系统误差等因素的影响,得到的 InSAR 干涉相位条纹图中往往会出现不连续的相位点,即残差点 阅读详情

相关推荐

Python自动化生成HyperMesh Tcl命令流:从几何建模到有限元分析

本文详细介绍了如何利用Python自动化生成HyperMesh的Tcl命令流,实现从几何建模到有限元分析的全流程二次开发。通过封装常用操作函数,工程师可以高效完成参数化建模、自动网格划分及求解器文件输出,显著提升CAE前处理效率与标准化水平。

weixin_29041767的博客 423

bzoj 3670 [Noi2014]动物园

bzoj 3670 动物园 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3670 Description 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解KMP算法。

DJS_K_D的专栏 871

【NCBI】SRA toolkit安装及使用-Windows&Linux版本

由于市面上的文章介绍SRA toolkit基本上都是基于Linux,而在windows下运行SRA toolkit基本上可以达到相同的效果且更为方便,故本文将分别阐明在Windows和Linux环境下SRA toolkit的安装及使用。

weixin_48076899的博客 2万+

[NOI2014]动物园(kmp+递推)

【题解】 这里首先定义失配指针f[i]满足:第i个位置的字符与第f[i]位相同,字符数组从1开始  如:aba f[1]=0,f[2]=0,f[3]=1  要求出num[i],只需延f指针上溯,找到所有长度不超过i/2的位置,它的数目即为num[i] 可以考虑fail树的思想,用cnt[i]记录从i延失配指针上溯,能遇到的结点数目  找出最大的长度不超过i/2的位置j,则num[i]=c

cjk_My steps 1758

华为AC外置Portal认证方案配置步骤指南

华为AC外置Portal认证方案配置步骤指南

m0_46129105的博客 7661

从HSPICE到Spectre:手把手教你搞定不同SPICE仿真器的网表转换(附避坑指南)

本文详细介绍了从HSPICE到Spectre的SPICE仿真器网表转换方法,包括核心语法差异、分步转换流程和常见问题排查。通过实战案例和避坑指南,帮助工程师高效解决不同SPICE仿真器间的兼容性问题,提升集成电路设计效率。

weixin_29745609的博客 366

BZOJ 3670 [NOI2014]动物园

3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3613 Solved: 1961 [Submit][Status][Discuss] Description 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃...

wans__的博客 317

Ros入门 (十)----激光雷达避障 简易实现

本篇文章通过订阅/scan话题获取障碍物的距离信息,达到避障目的,提供部分代码,仅供参考。

weixin_51157015的博客 1万+

NOI2014 动物园(kmp,bzoj3670)

传送门 3670: [Noi2014]动物园 Time Limit: 10 SecMemory Limit: 512 MB Description 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解KMP算法。 园长:“...

weixin_33827590的博客 207

【camera-radar】基于ROS的多传感器融合感知系统实现(雷达+相机)(2)

实现功能:代码下载地址:下载地址 1)基于深度学习的目标检测;2)基于雷达的距离估计和预测;3)多传感器感知结果融合模块。 相机感知模块解析 4. Run nodes: python3 fusion_node/main.py python3 gps_node/main.py python3 radar_node/main.py python3 2d_detection_node/main.py #(additional instructions in 2d_detection_node/README.m

踟蹰横渡口,彳亍上滩舟。 9948

Algorithm:【算法进阶之路】之算法面试刷题集合—数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构【元素/关系】、数据运算【十大排序/四大查找-图三大搜索-

​ Algorithm:【算法进阶之路】之算法面试刷题集合—数据结构的简介、最强学习路线(逻辑结构【数组-链表-栈和队列/树-图-哈希】、物理结构【元素/关系】、数据运算【十大排序/四大查找-图三大搜索-树三大遍历】、高级算法【枚举/回溯/递归/分治/动规/贪心】)、问题为导向的十大类刷题算法总结之详细攻略 目录 相关文章 数据结构思维导图 基本术语 一、数据结构的概述 二、数据的逻辑结构 三、数据的物理结构 四、数据的运算

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 6849

#5. 【NOI2014】动物园

http://uoj.ac/problem/5 题目即题解 肯定是 KMP 了(连着两年字符串 KMP SA  今年AC自动机?SAM?) 然后求长度不超过一半的next 直接用nnext暴力 会T的很惨 比如 aaaaaaaaaaaaa 然后可以记录两个 next 一个正常 一个是半大的 每次用半大的更新(结论自己想想)  如果长度太大 用正常的转移减少长度 剩下

sxb_201的博客 396

CE电流法测试中的dBμV负值解析

传导发射(CE)电流法测试中出现的dBμV负值现象表明被测设备干扰电平低于1μV参考基准。这源于对数计算特性(小于1μV的电压转换后为负值)、设备优良的EMC设计(如滤波效果显著)及测试环境的影响(LISN隔离、屏蔽室低噪声)。负值虽不代表实际负电压,但反映干扰水平优于标准限值,为系统集成预留电磁裕度。工程应用中需结合设备灵敏度、环境背景噪声等因素综合分析,避免误判,这类数据可用于评估EMI设计冗余度。

硬核科技 297

【JZOJ 3756】【NOI2014】动物园(kmp)

问题描述 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解 KMP 算法。 园长:“对于一个字符串 S,它的长度为 L。我们可以在 O(L)的时间内,求出一个名为 next 的数组。有谁预习了 next 数组的含义吗?” 熊猫:“对于

Fallen_Angel001的博客 438

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【省选专题二】字符串 jzoj 3756【NOI2014】动物园

Description近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。某天,园长给动物们讲解 KMP 算法。园长:“对于一个字符串 S,它的长度为 L。我们可以在 O(L)的时间内,求出一个名为 next 的数组。有谁预习了 next 数组的含义吗?”熊猫:“对于字符

liangzihao1的博客 230

Statistics and Machine Learning Toolbox

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

jzoj3756【NOI2014】动物园(kmp)

3756【NOI2014】动物园 (Standard IO) Description 近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。 某天,园长给动物们讲解 KMP 算法。 园长:“对于一个字符串 S,它的长度为 L。我们可以在 O(L)的时间内,求出一个

闲人请进 314

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【KMP】[Noi2014] bzoj3670 动物园

题目点这里 记得第一次看这道题。。林伟平在讲课。。。然后我看到那句企鹅只会卖萌要吃的。。就笑了出来。。。于是…… 感觉noi2014的题很考语文水平啊。。之前day1前两题我题全都看错orz。。第三题根本不造在做啥。。。。这道题我研究了很久才知道它是要求什么。。。 对于每个 0 然后。。。题目都告诉是KMP了 所以这题就是KMP乱搞了…… KMP是一个fix指针

每天心塞一点点 2306

BZOJ3670 NOI2014 动物园 题解&代码

利用了kmp的next数组特性,求出既是i位字符串的前缀又是其后缀的字符串个数num[i],然后按表达式求出积即可 首先进行统计,在求next的时候就可以统计出num[i]了【对于每一个p=next[i],num[i]满足num[i]=num[p]+1(即对于i位字符串,一定有p位字符串满足条件,于是加上p位字符串的num值,和求next[]的思路相似)】。 最后再次进行枚举,此时对于每一位ne

Rainbow6174's home 2026

[ NOI2014 ]动物园

题述《https://www.luogu.org/fe/problem/P2375》 #include<stdio.h> #include<string.h> char S[1000057];int next[1000057],num[1000057]; int main() { int n; int i,j,k; long long res;i...

莓尊尊strawberry 307

【BZOJ3670】【NOI2014】动物园 KMP变形 线性出解

题意:定义新字符串前缀为其和等字符数量后缀完全相同且无重叠部分(等价于其长度小于等于当前总字符数量的一半),定义新数组num [ i ] 为到字符串前 i 个字符中“新前缀的个数”。如aaaaa ,num数组为0,1,1,2,2。 下列列举a时用角标表示第几个a         num[1] : 不存在 ;         num[2] : 前缀a1与后缀a2 ;         num[

辗转山河弋流歌 5467

[BZOJ3670][NOI2014]动物园(KMP)

题目: 我是超链接 题解: 首先他给了我们关于next数组的提示,这挺好的。 先看到 num 的定义:不互相重叠的公共前后缀个数 说明 num不同于 next 记录的是一个最大值,它记录的是一个和值 那么我们先用kmp数组用递推求出ans[i]表示前缀后缀可以重叠的最长公共部分长度,这个可以用j蹦完之后直接ans[i]+1,加的1就是可以有个新的整体咯。 怎么去除重叠的呢?一旦有...

薇小薇 429

「NOI2014」动物园

link :https://loj.ac/problem/2246 水水KMP #include<bits/stdc++.h> #define ll long long #define maxn 1000005 using namespace std; const int ha=1000000007; char s[maxn]; int f[maxn]...

weixin_30414155的博客 292

一些基础算法的模板(持续更新)

更新中 //Templates From Extended_Ash/Cooevjnz/JacaJava/Tubbcrafft //To be continued... //Suffix Automation char str[N]; int s[N][26],mx[N],f[N],sz[N]; int last=1,cnt=1,n,v[N],r[N],ans=0; inlin

扩展の灰(Extended Ash/Cooevjnz) 3865

Jzoj4876 基因突变(红警系列)

邪恶的707刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类!     但是统治人类是很庞大且复杂的一个工程,707尝试了洗脑,催眠,以及武装镇压都没能成功地统治人类,于是她决定从科学上对人类的基因进行研究从而达到他的目的。     707获取了人类的基因信息并尝试对基因进行实验。他发现可以把人类的基因看做一个只包含小写字母的字符串,并定义从头开始任意长度的基因为“源头基因”人类身上与源

扩展の灰(Extended Ash/Cooevjnz) 1436

后缀数组SA-IS模板

. SAIS真的好快啊,在UOJ能卡进第二页 推荐几个讲的比较好的博客 链接1 链接2 链接3 和一篇讲了各种后缀数组算法的论文 Code: #pragma GCC optimize("O3") #pragma G++ optimize("O3") #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;algorithm&gt; ...

扩展の灰(Extended Ash/Cooevjnz) 1236
上一篇: Bzoj5088 HDU 6000 Wash
下一篇: Jzoj4061 字符串树
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值