P2375 动物园
题目的大意就是输出以任意一个字符结尾,既是前缀,又是后缀,且长度不超过总长度的一半的方案书的乘积。
考虑使用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 动物园的更多相关文章
- 洛谷 P2375 动物园
题目详情 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法 ...
- 洛谷P2375 动物园
我要死了.这是我做过的最恶心的题之一. 天下第一的大毒瘤.有gay毒. 我不如熊猫好多年... 题意:给定字符串,求g[i],表示:[0, i]中满足该子串既是前缀又是后缀还不重叠的子串数. 解:题面 ...
- [luogu P2375] [NOI 2014] 动物园
[luogu P2375] [NOI 2014] 动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向 ...
- 洛谷 P2375 [NOI2014]动物园 解题报告
P2375 [NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定 ...
- 2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分)
2021.11.16 P2375 [NOI2014] 动物园(EXKMP+差分) https://www.luogu.com.cn/problem/P2375 题意: PS:这道神题的背景让人疑惑,重 ...
- 【题解】洛谷P2375 [NOI2014] 动物园(KMP)
洛谷P2375:https://www.luogu.org/problemnew/show/P2375 思路 这道题可以说是完全刷新了本蒟蒻对KMP的理解 感觉对next数组的理解上升到一个新的高度 ...
- [洛谷P2375] [NOI2014]动物园
洛谷题目链接:[NOI2014]动物园 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决 ...
- 【KMP】洛谷P2375 [NOI2014]动物园 题解
一开始的方向应该对了,但是没有想到合理的优化还是没写出来…… 题目描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己 ...
- P2375 [NOI2014]动物园
考虑kmp. 这个题的主要问题就在于怎样使复杂度是正确的O(n). 可以先预处理一个数组cnt[]表示不考虑不能相交这个限制,有多少个border. 这个东西其实也就是fail树上的深度. 然后考虑怎 ...
随机推荐
- ubuntu 重新启动 导致 Namenode无法启动
hadoop 单节点安装成功了之后,心情那是叫一个激动.不过后来不知道为什么系统相当的慢.于是就把系统重启了.但是不妙的是namenode各种无法启动. 原来的配置: core-site.xml &l ...
- ajax请求状态码为0的解决办法
原文链接:https://blog.csdn.net/changqing5818/article/details/53932463 前言 今天遇到个奇怪的问题,使用JQuery的ajax请求,后台的C ...
- Java-IO中的节点流和处理流
理解好Java-IO中的节点流和处理流是理解Java输入.输出的关键基础,因此,了解节点流和处理流相关的知识点尤为重要. 1.定义 (1)节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...
- hadoop 常用hdfs命令
- [转]win系统下nodejs安装及环境配置
本文转自:http://www.cnblogs.com/linjiqin/p/3765390.html 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...
- DevStack添加Swift
# Swift# ----- # Swift is now used as the back-end for the S3-like object store. If Nova's# objectst ...
- (转)Memcached用法--参数和命令详解
Memcached用法--参数和命令详解 1. memcached 参数说明: # memcached -h 1.1 memcached 的参数 常用参数 -p <num> 监听的TCP端 ...
- dom4j使用
http://www.cnblogs.com/zfc2201/archive/2011/08/16/2141441.html http://www.blogjava.net/i369/articles ...
- Kudu1.1.0 、 Kudu1.2.0 Kudu1.3.0的版本信息异同比较
不多说,直接上干货! Kudu1.1.0 新特性 python API升级,具备JAVA C++client一样的功能(从0.3版本直接升级到1.1),主要的点如下: 1.1. 改进了Parial ...
- Python 参数设置
1. 配置文件(ConfigParser模块) 1.1 ConfigParser简介 ConfigParser 是用来读取配置文件的包.配置文件的格式如下:中括号“[ ]”内包含的为section.s ...