我们考虑朴素算法。

显然,我们可以先跑一遍 KMP,计算出每个 \(i\) 的 \(nxt_i\)。

然后,容易发现我们可以暴力跳每一个前缀串的 border,这样可以直接统计出 border 长度 \(\leq \lfloor \frac{i}{2} \rfloor\) 的 border 数量。


回到原题。我们发现上述朴素做法会被 \(2 \times 10^5\) 个 \(\text{a}\) 拉爆。于是我们考虑优化。

我们能不能考虑把重复的计算节省掉呢?

考虑类似 KMP 的优化。假设当前我们计算到 \(i\)。

发现,如果我们最大的 \(\leq \lfloor \frac{i}{2} \rfloor\) 的 border 长度为 \(x_i\),则 \(x_i\) 一定是 \(x_{i - 1}\) 的一个 border。

证明:博主暂时是感性理解。后面补严禁证明。

于是考虑一直使用一个 \(j\)。复杂度为 \(\mathcal{O}(n)\)。

以下是代码实现:

/*******************************
| Author: DE_aemmprty
| Problem: P1001 A+B Problem
| Contest: Luogu
| URL: https://www.luogu.com.cn/problem/P1001
| When: 2023-12-02 15:30:35
|
| Memory: 512 MB
| Time: 1000 ms
*******************************/
#include <bits/stdc++.h>
using namespace std; int read() {
char c = getchar();
int x = 0, p = 1;
while ((c < '0' || c > '9') && c != '-') c = getchar();
if (c == '-') p = -1, c = getchar();
while (c >= '0' && c <= '9')
x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return x * p;
} const int N = 1e6 + 7; int n;
string s;
int nxt[N], num[N], q[N]; void solve() {
cin >> s;
n = (int) s.size(); s = " " + s;
q[1] = 1;
for (int i = 2, j = 0; i <= n; i ++) {
while (j && s[j + 1] != s[i]) j = nxt[j];
if (s[j + 1] == s[i]) j ++;
nxt[i] = j; q[i] = q[j] + 1;
}
long long ans = 1;
for (int i = 2, j = 0; i <= n; i ++) {
while (j && s[j + 1] != s[i]) j = nxt[j];
if (s[j + 1] == s[i]) j ++;
while (j * 2 > i) j = nxt[j];
(ans *= 1ll * (q[j] + 1)) %= 1000000007;
}
printf("%lld\n", ans);
} signed main() {
int t = read();
while (t --) solve();
return 0;
}

P2375 题解的更多相关文章

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

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

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

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

  3. Luogu P2375 [NOI2014 D2]动物园 kmp

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

  4. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  5. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  6. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  7. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  8. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  9. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  10. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. quartz 读取xml文档执行任务

    xml 配置 <?xml version="1.0" encoding="UTF-8"?> <job-scheduling-data xmln ...

  2. P2150 [NOI2015] 寿司晚宴 题解

    P2150 [NOI2015] 寿司晚宴 刚开始看错题了,推了一个与原题类似的 DP 方程,然后不会优化,笑了. 思路 首先看到 \(n\) 很小,然后质因子个数就更少了. 因此第一反应是将所有的质因 ...

  3. CUDA:页锁定内存(pinned memory)和按页分配内存(pageable memory )

    CUDA架构而言,主机端的内存分为两种,一种是可分页内存(pageable memroy), 一种是页锁定内存(page-lock或 pinned). 可分页内存是由操作系统API malloc()在 ...

  4. Ubuntu下好用的工具

    UML画图工具 推荐:Drawio 参考:https://blog.csdn.net/jsm1010/article/details/112920539 安装命令:sudo snap install ...

  5. 用python标准库smtplib来发QQ邮件及Django中发送邮件

    1.QQ邮箱设置 点击QQ邮箱账号,进入后,开启smtp服务许可: 点击"生产授权码",在手机上发送相应的短信,得到授权码.[注意授权码之间没有空格] 2.典型代码块   impo ...

  6. B1014 福尔摩斯的约会 && A1061 Dating

    描述 大侦探福尔摩斯接到一张奇怪的字条: 我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm 大侦探很快就明白了, ...

  7. 【鸿蒙生态学堂04】ArkUI开发基础(上)

    课程介绍 本课程将介绍HarmonyOS的ArkUI框架,包括其基础语法和如何使用常用组件构建页面.ArkUI是HarmonyOS应用的UI开发框架,提供简洁的UI语法.丰富的组件和实时界面预览工具. ...

  8. Spring扩展接口-BeanPostProcessor

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  9. 现在的AI还能写出短剧剧本了?

    本文由 ChatMoney团队出品 现在大家打开抖音.小红书,琳琅满目,目光所能及的都是各种吸精剧情的小短剧,虽然这些短剧的制作成本低,但是作为编剧的要写脚本,可不认为这么容易啊......... 接 ...

  10. 开源共建 | TIS整合数据同步工具ChunJun,携手完善开源生态

    TIS整合ChunJun实操 B站视频: https://www.bilibili.com/video/BV1QM411z7w5/?spm_id_from=333.999.0.0 一.ChunJun ...