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[]的思路相似)】。
最后再次进行枚举,此时对于每一位next[]如果其大于长度的一半,那么递归求出下一个满足条件的next[],ans与新的next[]对应的位置的cnt[]+1相乘,得到答案。
求cnt的时候可以直接顺便算出ans…我傻了,没反应上来,写了两遍枚举
#include<iostream>
#include<cstdio>
#include<cstring>
#define LL long long
#define MOD 1000000007
using namespace std;
const int maxn=1000005;
int T,next[maxn],cnt[maxn];
char s[maxn];
LL ans=1;
void getnext(void)
{int p=0;cnt[1]=1;for(int i=2;s[i];i++){while(p && s[p+1]!=s[i])p=next[p];if(s[p+1]==s[i])p++;next[i]=p;cnt[i]=cnt[p]+1;}
}
void getnum(void)
{int p=0;for(int i=2;s[i];i++){while(p && s[p+1]!=s[i])p=next[p];if(s[p+1]==s[i])p++;while(p*2-i>0)p=next[p];ans*=cnt[p]+1;//cout<<p<<' '<<cnt[p]<<endl;ans%=MOD;}
}
int main(void)
{scanf("%d",&T);while(T--){ans=(LL)1;scanf("%s",s+1);//cout<<n<<endl;getnext();getnum();printf("%lld\n",ans);}return 0;
}
BZOJ3670 NOI2014 动物园 题解代码相关推荐
- 洛谷P2375 [NOI2014] 动物园 题解
洛谷P2375 [NOI2014] 动物园 题解 题目链接:P2375 [NOI2014] 动物园 题意: 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物 ...
- bzoj-3670 [Noi2014]动物园
3670: [Noi2014]动物园 题目链接 时间限制: 10 Sec 内存限制: 512 MB 提交: 3558 解决: 1925 [提交][][] 题目描述 近日,园长发现动物园中好吃懒做的动物 ...
- BZOJ3670 [Noi2014]动物园 【KMP计数】
3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3143 Solved: 1690 [Submit][Stat ...
- bzoj3670 [Noi2014]动物园
[Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游 ...
- BZOJ3670: [Noi2014]动物园
Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...
- P2375 [NOI2014] 动物园 kmp fail指针/倍增
传送门 文章目录 题意: 思路: 题意: 思路: 由kmpkmpkmp中失配数组nenene的含义我们知道,ne[i],ne[ne[i]],...ne[i],ne[ne[i]],...ne[i],ne ...
- bzoj 3670 [NOI2014]动物园
3670: [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 2032 Solved: 1077 [Submit][Stat ...
- FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】
牛客 Verilog 刷题入门篇1~24 + 进阶篇1~34 题解代码,所有代码均能通过测试,配合视频讲解效果更佳.为避免内容冗余,本文只给出代码,部分题目给出必要说明. 很多题目本身出题有些问题,着 ...
- C++小木棍题解代码(备用)
C++小木棍题解代码(备用) #include<iostream> #include<cstdio> #include<cstring> #include<a ...
最新文章
- 8位无符号和8位有符号转化为更高字节类型的问题
- Jackson的简单用法
- 计算机网络测试两个主机连通性,计算机网络试卷A
- db2-存储过程word版
- Unicode、UTF-8 和 ISO8859-1到底有什么区别(转载)
- 印度程序员为什么牛掰之ISAS.激发人的兴趣.探索精神.
- 软件工程——认识方法、模型、工具和技术
- liunx下mysql远程连接_Linux下mysql实现远程连接
- 吾很努力了,吾不是关键因素
- php 生成多个水印,php 生成水印的完整代码
- 【YOLOX训练部署】YOLOX训练自己的VOC数据集
- 【Android】Error obtaining UI hierarchyError while obtaining UI hierarchy XML file: com.android...
- matlab 替换字符 数字,使用正则表达式替换文本
- 银河麒麟arm64 qt打包
- 【精选】小白是如何挖漏洞的(技巧篇)
- Jetson TX2 刷机中遇到的奇葩大坑
- 题解 [NOIP2022] T1 种花
- FFmpeg Mp4加解密
- 【自动驾驶-感知-红绿灯】红绿灯识别常见Corner Case总结
- latex 模板使用技巧——参考文献篇
热门文章
- 【论文阅读】GRAPH-BASED RECURRENT RETRIEVER
- 可变参数及Lambda表达式
- C++核心准则R.2: 只在接口中表示单独对象使用原始指针​
- 二级C语言操作例题(十)
- 用GSF(GNOME结构化文档库)库查看压缩文件的内容
- word图片显示:如何打开多图文档不再卡慢
- 解决小程序button: text-align: center;不生效的问题
- windows训练自己的语义分割
- 独立开发变现周刊(第78期):建立一个佣金网站,每月赚4万美元
- PPT快捷键与操作技巧