入口

题目的大意就是输出以任意一个字符结尾,既是前缀,又是后缀,且长度不超过总长度的一半的方案书的乘积。

考虑使用kmp

在处理失配数组的同时,处理出来以每个字符结尾的时的,能有多少个前缀和后缀相同的数量。

然后在进行一次类似kmp的匹配,在这次匹配中处理出来答案。

先是为什么要处理多少个前缀和后缀相同的数量。

比如说,b是a的前缀和后缀,c是b的前缀和后缀(都合法)

然后c也肯定是a的前缀和后缀。处理出这个数组来,我们在寻求答案是只需要找到第一个符合条件的前缀&&后缀。加上我们预处理的个数就可以了。

//50分
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
char data[1010000];
int fail[1010000];
int num[1010000];
int main()
{ int m;
scanf("%d",&m);
while(m--)
{
scanf("%s",data);
memset(fail,0,sizeof(fail));
memset(num,0,sizeof(num));
int len=strlen(data)-1;
int k=0;num[1]=1;
for(int i=1;i<=len;i++)
{
while(k&&data[i]!=data[k])
k=fail[k];
if(data[i]==data[k]) fail[i+1]=++k;
num[i+1]=num[k]+1;
}
long long ans=1;
const long long mode=1e9+7;
for(int i=1;i<=len+1;i++)
{
k=i;
while((k<<1)>i)
k=fail[k];
ans=(ans*(num[k]+1))%mode;
}
printf("%lld\n",ans);
}
}

这是每次暴力从尾利用失配数组暴力蹦跶。

然后我们考虑加速一波。

每次从当前尾部暴力蹦跶肯定不行,我们考虑一下加速。

我们再一次利用类似kmp的方法。

因为我们每次只向后推一位结尾。

我们就可以利用上一次失配指针的位置,进行转移。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
char data[1000010];
int fail[1000010];
int num[1000010];
const long long mode=1e9+7;
int main()
{
int m;scanf("%d",&m);
while(m--)
{
memset(fail,0,sizeof(fail));
memset(num,0,sizeof(num));
scanf("%s",data);
int len=strlen(data)-1;
int k=0;num[1]=1;
for(int i=1;i<=len;i++)
{
while(k&&data[i]!=data[k]) k=fail[k];
if(data[i]==data[k]) fail[i+1]=++k;
num[i+1]=num[k]+1;
}
k=0;
long long ans=1;
for(int i=1;i<=len+1;i++)
{
while(k&&data[i]!=data[k]) k=fail[k];
while((k<<1)>=i)
k=fail[k];
if(data[i]==data[k]) ++k;
ans=(ans*(num[k]+1))%mode;
}
printf("%lld\n",ans);
} }

P2375 动物园的更多相关文章

  1. 洛谷 P2375 动物园

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

  2. 洛谷P2375 动物园

    我要死了.这是我做过的最恶心的题之一. 天下第一的大毒瘤.有gay毒. 我不如熊猫好多年... 题意:给定字符串,求g[i],表示:[0, i]中满足该子串既是前缀又是后缀还不重叠的子串数. 解:题面 ...

  3. [luogu P2375] [NOI 2014] 动物园

    [luogu P2375] [NOI 2014] 动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向 ...

  4. 洛谷 P2375 [NOI2014]动物园 解题报告

    P2375 [NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定 ...

  5. 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)

    2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...

  6. 【题解】洛谷P2375 [NOI2014] 动物园(KMP)

    洛谷P2375:https://www.luogu.org/problemnew/show/P2375 思路 这道题可以说是完全刷新了本蒟蒻对KMP的理解 感觉对next数组的理解上升到一个新的高度 ...

  7. [洛谷P2375] [NOI2014]动物园

    洛谷题目链接:[NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决 ...

  8. 【KMP】洛谷P2375 [NOI2014]动物园 题解

        一开始的方向应该对了,但是没有想到合理的优化还是没写出来…… 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己 ...

  9. P2375 [NOI2014]动物园

    考虑kmp. 这个题的主要问题就在于怎样使复杂度是正确的O(n). 可以先预处理一个数组cnt[]表示不考虑不能相交这个限制,有多少个border. 这个东西其实也就是fail树上的深度. 然后考虑怎 ...

随机推荐

  1. Could not read settings.xml

    这个问题为什么会发生? 其实不要想太多, 1.文件格式是utf-8 2.其中的报文格式非常重要,千万不能弄错,如果多了一处注释,就会发生以上问题,拼写的时候多注意语义

  2. TypeScript -- JavaScript的救赎

    TypeScript的设计目的应该是解决JavaScript的"痛点":弱类型和没有命名空间,导致很难模块化,不适合开发大型程序.另外它还提供了一些语法糖来帮助大家更方便地实践面向 ...

  3. MyCnblog Style

    以下内容添加到页脚HTML代码处 <style> #leftmenu ul { display: none; } .cnblogs-markdown pre code, .cnblogs- ...

  4. [转]JS判断访问设备、客户端操作系统类型

    本文转自:http://www.cnblogs.com/duanguyuan/p/3534470.html 先给出一个实例:判断windows.linux.android 复制以下代码另存为html文 ...

  5. Spark Streaming简介

    离线计算和实时计算对比 1)数据来源 离线:HDFS历史数据 数据量比较大 实时:消息队列(Kafka),实时新增/修改记录过来的某一笔数据 2)处理过程 离线:MapReduce: map+redu ...

  6. 既然有了HBase,为什么还需要Kudu呢?

    不多说,直接上干货! 那既然有了HBase,为什么还需要Kudu呢? 简单的说,就是嫌弃HBase在OLAP(联机分析处理)场合,SQL/MR类的批量检索场景中,性能不够好.通常这种海量数据OLAP场 ...

  7. 【ubuntu】出现device not managed连接不上网络

    ubuntu安装好后显示“device not managed” 1. 编辑/etc/NetworkManager/NetworkManager.conf: sudo gedit /etc/Netwo ...

  8. SpingCloud微服务架构学习(二)之Actuator监控

    我们那我们之前编写的服务提供者为例,为项目添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId& ...

  9. vim基本操作思维导图

  10. 从零开始的全栈工程师——js篇2.20(事件对象 冒泡与捕获)

    一.复习 面向对象 1)单例模式 2)工厂模式 3)构造函数 ①类js天生自带的类 基类object function array number math boolean date regexp st ...