bzoj 3670 [Noi2014]动物园

【bzoj3670】 [NOI2014]动物园 这道题我WA了好几遍,很平常的对于KMP的应用,一开始还T了,后来发现自己好像写了假的KMP,改了一下就A掉了,因为递归的话可能被卡成n^2,所以要递推出解,一种很巧妙的写法就可以直接递推出解(其实KMP本来就是这么写的。。)#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorith 阅读详情

                                        bzoj 3670 动物园

Description

近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。

某天,园长给动物们讲解KMP算法。

园长:“对于一个字符串S,它的长度为L。我们可以在O(L)的时间内,求出一个名为next的数组。有谁预习了next数组的含义吗?”

熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i]。”

园长:“非常好!那你能举个例子吗?”

熊猫:“例S为abcababc,则next[5]=2。因为S的前5个字符为abcab,ab既是它的后缀又是它的前缀,并且找不到一个更长的字符串满足这个性质。同理,还可得出next[1] = next[2] = next[3] = 0,next[4] = next[6] = 1,next[7] = 2,next[8] = 3。”

园长表扬了认真预习的熊猫同学。随后,他详细讲解了如何在O(L)的时间内求出next数组。

下课前,园长提出了一个问题:“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]分别是多少,你只需要输出对1,000,000,007取模的结果即可。

Input

第1行仅包含一个正整数n ,表示测试数据的组数。随后n行,每行描述一组测试数据。每组测试数据仅含有一个字符串S,S的定义详见题目描述。数据保证S 中仅含小写字母。输入文件中不会包含多余的空行,行末不会存在多余的空格。

 

Output

包含 n 行,每行描述一组测试数据的答案,答案的顺序应与输入数据的顺序保持一致。对于每组测试数据,仅需要输出一个整数,表示这组测试数据的答案对 1,000,000,007 取模的结果。输出文件中不应包含多余的空行。

Sample Input

3
aaaaa
ab
abcababc





Sample Output

36
1
32

HINT

n≤5,L≤1,000,000


用KMP 思想做
#include<cstdio>
#include<cstring>
#define MAXN 1000010
#define MOD 1000000007
using namespace std;
typedef long long ll;
char s[MAXN];
ll next[MAXN],cnt[MAXN],ans;
int n;
void KMP()
{
    int i,j=0;
    cnt[1]=1;
    for( i=2;s[i];i++)
    {
        while(j&&s[j+1]!=s[i])  j=next[j];
        if(s[j+1]==s[i])  ++j;
        next[i]=j;
        cnt[i]=cnt[j]+1;
    }
     j=0;ans=1;
    for(i=1;s[i];i++)
    {
        while(j&&s[j+1]!=s[i])  j=next[j];
        if(s[j+1]==s[i])  ++j;
        while((j<<1)>i)  j=next[j];
        ans*=cnt[j]+1;
        ans%=MOD;
    }
}
int main()
{
    scanf("%d",&n);
     for(int i=1;i<=n;i++)
     {
          scanf("%s",s+1);
          KMP();
          printf("%lld\n",ans);
    }
    return 0;
}




robomimic实验复现全流程:从数据集下载到训练视频生成 本文详细介绍了机器人模仿学习项目RoboMimic的完整实验复现流程。内容涵盖从使用Conda创建Python 3.8隔离环境、安装RoboSuite仿真器和MuJoCo物理引擎,到下载并探索数据集、配置与启动模型训练,最后进行模型评估和生成策略执行视频。该指南旨在帮助研究者和开发者高效搭建实战环境,规避常见问题,快速验证算法或应用于实际场景。 阅读详情

相关推荐

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

最短时间【题解】

dp入门

m0_57344422的博客 1104

STM32入门教程:WiFi通信

STM32是一款强大的嵌入式系统开发平台,可以用于开发各种应用程序,包括WiFi通信。在本教程中,我们将介绍如何使用STM32开发板和WiFi模块进行无线通信。以下是一个详细的代码案例,涵盖了WiFi通信的基本概念和实现。

qq_67153941的博客 1348

【51Nod1277】字符串中的最大值

Description一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。 给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。 例如:S = “abababa” 所有的前缀如下:“a”, 长度与出现次数的乘积 1 * 4 = 4, “ab”,长度与出现次数的乘积 2 * 3 = 6, “aba”, 长度与出现次数的

Facico的博客 1307

保姆级教程:断网环境下用Flexnet服务器搞定SolidWorks 2021安装与破解(附错误5解决方案)

本文提供SolidWorks 2021在断网环境下的企业级部署指南,详细解析Flexnet服务器本地化工作原理,并给出安装与破解的实战方案,特别针对常见的'错误5'问题提供多维度解决方案。适用于需要内网隔离或移动办公的工业设计场景,确保数据安全与授权合规。

weixin_28683391的博客 297

海量Embedding进行相似度查询和比较的方法

这个是在科研中的现实需求。例如每一个源代码文件,我们可以生成一个embedding,如果有超过5000万个embedding(例如用BERT生成5000万个embedding),怎么样有效地计算相似性呢(例如有5000个positive的embedding,想在5000万个中找到类似的)。 简单介绍一下我尝试的结果:如果直接用torch.cosine_similarity,我手里的数据估计至少要处理两个月。这时候就想到了用LSH -- Locality Sensitive Hashing,但是我之前并没怎

qysh123的专栏 4567

【NOI2014】动物园

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

chen1352 542

基于AIS动态数据与AI结合得经纬度标示算法

港口船舶智能标注系统 本系统通过结合摄像头视频流和AIS船舶动态数据,利用AI技术实现船舶实时标注功能。系统架构包括视频流处理、AIS数据解析、船舶检测匹配和坐标映射转换等模块。关键技术步骤: AIS数据获取:通过本地接收机或网络API获取船舶位置、航速等信息 AI目标检测:采用YOLOv8等模型识别视频中的船舶 船舶匹配算法:通过位置投影或运动轨迹匹配视频目标与AIS数据 坐标映射:使用相机标定技术将经纬度转换为图像坐标 实时标注:在视频画面上叠加船名、位置等关键信息 应用场景包括港口监控、智能海事管理和

qianbo042311的博客 1808

(KMP)[NOI2014] 动物园解析

(KMP)[NOI2014] 动物园解析 以前oi的时候没好好学的算法,大学再学一遍,收获还是蛮大的 本题要求num[i]+1的乘积,其中num[i]是对于一个字符串的第i个前缀所具有的长度不大于i/2的(前缀函数求的那种)前缀的个数。 1 当然先kmp,发现可以暴力跳转,也就是kmp求得 pi[i](或者称之为next[i])后暴力枚举pi[pi[i]-1],直到长度满足要求,复杂度为O(n2)。 发现这个枚举很眼熟,可以通过倍增优化,时间复杂度降至O(nlgn)。 2 上面得到的是最大的满足

vermouth_1412的博客 609

SAP ATP检查全解析:从配置到BAPI_RESERVATION_CREATE1应用实例

本文全面解析SAP ATP检查功能,从基础配置到BAPI_RESERVATION_CREATE1高级应用,涵盖物料可用性检查、动态规则设置及性能优化策略。通过实战案例演示如何利用BAPI_MATERIAL_AVAILABILITY实现精准库存承诺,提升供应链效率,特别适合SAP顾问和库存管理人员参考。

dropout6artist的博客 677

保姆级教程:用CST 2023一步步复现一个1-8GHz Vivaldi天线(含参数优化与结果分析)

本文提供了一份详细的CST 2023教程,指导读者如何从零开始设计并优化1-8GHz Vivaldi天线。内容涵盖工程设置、参数化建模、仿真加速技巧以及性能优化策略,特别适合需要实现宽带天线设计的工程师和研究人员。通过实战案例,帮助用户掌握Vivaldi天线的核心设计要点和CST高级功能应用。

weixin_30800987的博客 618

#5. 【NOI2014】动物园

%miaom

wamach的博客 408

MGC3130 3D手势识别传感器原理图设计,已量产(交互传感器)

最近在落地一款互动艺术装置的控制模块,选了 Microchip 的 MGC3130 做核心 —— 这颗芯片算是 GestIC® 近场传感技术的 “熟面孔” 了,把 3D 手势识别、运动跟踪的信号处理都集成在一颗芯片里,0-10cm 的检测距离刚好适配桌面级互动场景,挥挥手就能控设备的体验,放在艺术装置里确实很出效果。今天扒一下实际跑通的原理图,聊聊每个模块的设计思路。

不脱发的程序猿 370

bzoj3670[Noi2014]动物园

bzoj3670[Noi2014]动物园 题意: 对于字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠,将这种字符串的数量记作num[i]。给出字符串S求所有num[i]+1的乘积模1000000007。字符串长度≤1000000 题解: 先求一遍fail函数,得到数组记为next1,然后再求next2数组,表示满足next1[j]*2≤i的...

anheku1562的博客 170

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

bzoj3670 [Noi2014]动物园 kmp

bzoj3670 [Noi2014]动物园 kmp 题意:长度<=100w的字符串 num[i]表示前i个字符组成的字符串中既是前缀又是后缀且前缀后缀不重叠的子字符串个数 求%(1e9+7) 题解:开始看错题了……以为num[i]是既是前缀又是后缀且前缀后缀不重叠的最长子字符串长度……翻题解没弄懂他们的方法……自己yy一个没敢写呢仔细一看题卧槽……这个事情告诉我们仔细看样例啊…… num[i]

yxr0105 642

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【bzoj3670】[Noi2014]动物园

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

anzhi7214的博客 111

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

bzoj3670【NOI2014】动物园

KMP

AaronPolaris 4395

BZOJ3670 [Noi2014]动物园

[Solution] It

_laekov 2199

[kmp] bzoj3670: [Noi2014]动物园

bzoj3670: [Noi2014]动物园:https://www.lydsy.com/JudgeOnline/problem.php?id=3670 求p #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;algorithm&gt; using namespace std; char a[1100000]; int ...

kkkGIGi_qtt 210

【KMP】[Noi2014] bzoj3670 动物园

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

每天心塞一点点 2306

bzoj3670动物园【NOI2014】

kmp中next数组运用

YHaX的博客 1619

bzoj 3670 [NOI2014]动物园

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

SBS的博客 311

BZOJ3670 [NOI2014]动物园 [KMP]

BZOJ3670 [NOI2014]动物园 [KMP] 题目描述 题目传送门 题解 这道题主要利用了Fail数组(本题中的next数组)的性质。 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i]。” 设num[i]num[i]num[i]表示字符串的前iii位中前缀和后缀相等的字符串个数(没有“...

AnnieL 311

BZOJ 3670 NOI2014 动物园 KMP算法

题意: 给定一个长为L的字符串(L 求Π(num[i]+1)%1000000007 这就是KMP算法的一个变形。。。首先求出next数组,顺便求出cnt数组,代表长度为i的前缀经过几次fix=next[fix]会得到0,然后重新匹配一次,这次注意当fix*2>i的时候令fix=next[fix]即可 这题有坑 切忌用num数组代替next 此外勿忘开long long 这题就水过去了。

世界 3226

【NOI2014】BZOJ3670动物园题解(KMP算法)

题目:BZOJ3670. 题目大意:给定一个字符串,求这个字符串每一个前缀S[1..i]S[1..i]S[1..i]的既是前缀又是后缀且这两个前后缀不能重叠的子串的数量num[i]num[i]num[i],并输出所有(num[i]+1)(num[i]+1)(num[i]+1)的乘积. 这道题是道语文题,题面又臭又长而且num[i]num[i]num[i]的定义是数量不是最长长度,在题面理解上直接是...

hzk_cpp的博客 373
上一篇: bzoj 1046: [HAOI2007]上升序列 LIS
下一篇: bzoj 1911 [Apio2010]特别行动队斜率优化+DP
DJS_K_D
博客等级 码龄12年 2粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值