利用了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 动物园 题解代码相关推荐

  1. 洛谷P2375 [NOI2014] 动物园 题解

    洛谷P2375 [NOI2014] 动物园 题解 题目链接:P2375 [NOI2014] 动物园 题意: 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物 ...

  2. bzoj-3670 [Noi2014]动物园

    3670: [Noi2014]动物园 题目链接 时间限制: 10 Sec 内存限制: 512 MB 提交: 3558 解决: 1925 [提交][][] 题目描述 近日,园长发现动物园中好吃懒做的动物 ...

  3. BZOJ3670 [Noi2014]动物园 【KMP计数】

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 3143  Solved: 1690 [Submit][Stat ...

  4. bzoj3670 [Noi2014]动物园

    [Noi2014]动物园 Time Limit: 10 Sec Memory Limit: 512 MB Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游 ...

  5. BZOJ3670: [Noi2014]动物园

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

  6. P2375 [NOI2014] 动物园 kmp fail指针/倍增

    传送门 文章目录 题意: 思路: 题意: 思路: 由kmpkmpkmp中失配数组nenene的含义我们知道,ne[i],ne[ne[i]],...ne[i],ne[ne[i]],...ne[i],ne ...

  7. bzoj 3670 [NOI2014]动物园

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2032  Solved: 1077 [Submit][Stat ...

  8. FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】

    牛客 Verilog 刷题入门篇1~24 + 进阶篇1~34 题解代码,所有代码均能通过测试,配合视频讲解效果更佳.为避免内容冗余,本文只给出代码,部分题目给出必要说明. 很多题目本身出题有些问题,着 ...

  9. C++小木棍题解代码(备用)

    C++小木棍题解代码(备用) #include<iostream> #include<cstdio> #include<cstring> #include<a ...

最新文章

  1. 8位无符号和8位有符号转化为更高字节类型的问题
  2. Jackson的简单用法
  3. 计算机网络测试两个主机连通性,计算机网络试卷A
  4. db2-存储过程word版
  5. Unicode、UTF-8 和 ISO8859-1到底有什么区别(转载)
  6. 印度程序员为什么牛掰之ISAS.激发人的兴趣.探索精神.
  7. 软件工程——认识方法、模型、工具和技术
  8. liunx下mysql远程连接_Linux下mysql实现远程连接
  9. 吾很努力了,吾不是关键因素
  10. php 生成多个水印,php 生成水印的完整代码
  11. 【YOLOX训练部署】YOLOX训练自己的VOC数据集
  12. 【Android】Error obtaining UI hierarchyError while obtaining UI hierarchy XML file: com.android...
  13. matlab 替换字符 数字,使用正则表达式替换文本
  14. 银河麒麟arm64 qt打包
  15. 【精选】小白是如何挖漏洞的(技巧篇)
  16. Jetson TX2 刷机中遇到的奇葩大坑
  17. 题解 [NOIP2022] T1 种花
  18. FFmpeg Mp4加解密
  19. 【自动驾驶-感知-红绿灯】红绿灯识别常见Corner Case总结
  20. latex 模板使用技巧——参考文献篇

热门文章

  1. 【论文阅读】GRAPH-BASED RECURRENT RETRIEVER
  2. 可变参数及Lambda表达式
  3. C++核心准则R.2: 只在接口中表示单独对象使用原始指针​
  4. 二级C语言操作例题(十)
  5. 用GSF(GNOME结构化文档库)库查看压缩文件的内容
  6. word图片显示:如何打开多图文档不再卡慢
  7. 解决小程序button: text-align: center;不生效的问题
  8. windows训练自己的语义分割
  9. 独立开发变现周刊(第78期):建立一个佣金网站,每月赚4万美元
  10. PPT快捷键与操作技巧