题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746

题目大意:给你一个串 \(s\) ,要求 \(s\) 的开头或结尾添加最少的字符,使得添加后的串可以表示为 \(K\) 个相同的子串的拼接 \((K>=2)\) 。

题目分析:首先如果这个串s已经是一个循环串了,这种情况下 \(nxt[m-1] != -1\) 且 \(m-1-nxt[m-1]\) 能够整除 \(m\) ,那么输出 \(0\) 即可。

错误分析: 不然的话,我们添加一些字符后的串应该是 \(m-1-nxt[m-1]\) 长度的两倍,所以要添加的字符的数量是 \((m-1-nxt[m-1)*2-m\) 。(这样是WA的)。

然后,我们令 \(len = m-1-nxt[m-1]\) ,答案就是 \(len - m % len\) 。

实现代码如下:

#include <string>
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 100100; int T, m, nxt[maxn];
string t;
char ch[maxn]; string read() {
scanf("%s", ch);
string tmp_s = ch;
return tmp_s;
} void cal_next() {
m = t.length();
for (int i = 0, j = -1; i < m; i ++) {
while (j != -1 && t[j+1] != t[i]) j = nxt[j];
nxt[i] = (j+1 < i && t[j+1] == t[i]) ? ++j : -1;
}
} int main() {
scanf("%d", &T);
while (T --) {
t = read();
cal_next();
int p = nxt[m-1] + 1;
if (nxt[m-1] != -1 && m % (m-1-nxt[m-1]) == 0) {
puts("0");
} else {
// printf("%d\n", (m-1-nxt[m-1])*2-m );
int len = m-1-nxt[m-1];
printf("%d\n", len - m % len );
}
}
return 0;
}

作者:zifeiy

HDU3746 Teacher YYF 题解 KMP算法的更多相关文章

  1. POJ3080 Blue Jeans 题解 KMP算法

    题目链接:http://poj.org/problem?id=3080 题目大意:给你N个长度为60的字符串(N<=10),求他们的最长公共子串(长度>=3). 题目分析:KMP字符串匹配 ...

  2. POJ2185 Milking Grid 题解 KMP算法

    题目链接:http://poj.org/problem?id=2185 题目大意:求一个二维的字符串矩阵的最小覆盖子矩阵,即这个最小覆盖子矩阵在二维空间上不断翻倍后能覆盖原始矩阵. 题目分析:next ...

  3. HDU1711 Number Sequence 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目大意:最基础的字符串匹配,只不过这里用整数数组代替了字符串. 给你两个数组 \(a[1..N ...

  4. HDU1686 Oulipo 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 题目大意:给你一个子串t和一个母串s,求s中有多少个子串t. 题目分析:KMP模板题. cal_ ...

  5. HDU3336 Count the string 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336 题目大意:找出字符串s中和s的前缀相同的所有子串的个数. 题目分析:KMP模板题.这道题考虑 n ...

  6. POJ2752 Seek the Name, Seek the Fame 题解 KMP算法

    题目链接:http://poj.org/problem?id=2752 题目大意:给你一个字符串 \(S\) ,如果它的一个前缀同时也是它的后缀,则输出这个前缀(后缀)的长度. 题目分析:next函数 ...

  7. POJ2406 Power Strings 题解 KMP算法

    题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...

  8. HDU2087 剪花布条 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题目大意:给定字符串 \(s\) 和 \(t\) ,找出 \(s\) 中出现不重叠的 \(t\) ...

  9. HDU1358 Period 题解 KMP算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358 题目大意:给你一个长度为 \(n\) 的字符串 \(s\) ,那么它有 \(n\) 个前缀. 对 ...

随机推荐

  1. Anngular.js的大致了解

    只要出发事件 这个事件会刷新DOM节点,去重新渲染DOM节点(把dom擦掉重新画) 浪费内存 浪费效率所以使用Angular.js -懒查找 不涉及渲染 效率最高 展现效率 比原声使用两个事件互相监听 ...

  2. xor

    xor 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Your are given n ...

  3. 关于Ajax提交后无法刷新iframe页面的问题

    原因及解决方法: 要把刷新代码写进ajax的代码块里面,而不是放在后面

  4. CTSC2016时空旅行

    当时看这道题AC的人数比较多,就开了这道题. 很容易发现是这是一个有关凸包的题. 然后不知道怎么维护凸包,一直在想cdq,感觉复杂度不行,于是被这玩意难住了…… 幸好有亲学长yyh造福人类的题解:ht ...

  5. Phpstrom 配置php版本语法支持

  6. Android原生调用mui里面的js如何实现

    遍历所有运行中的webview页面,采用自带的SDK方法进行获取所有的IWebview.MUI中自带的webview是一个IWebviewArrayList<IWebview> webli ...

  7. vue常用操作及学习笔记(路由跳转及路由传参篇)

    路由跳转 - 超链接方式跳转 html: <div id="app"> <h1>Hello App!</h1> <p> <!- ...

  8. SDUT-3379_数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 根据给定的一系列整数关键字和素数p, ...

  9. 洛谷 P4205 [NOI2005]智慧珠游戏 DFS

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P4205 [NOI2005]智慧珠游戏 题目描述 智慧 ...

  10. WCF ChannelFactory

    public static class WcfExtensions{    public static void Using<T>(this T client, Action<T&g ...