题目链接:https://cn.vjudge.net/problem/HDU-3746

题意

给一串珠子,我们可以在珠子的最右端或最左端加一些珠子

问做一条包含循环珠子的项链,最少还需要多少珠子

思路

KMP的另一个用法,求最小循环节minloop=len-fail[len]

用我的观点来看KMP的fail数组,就是值域和定义域都是串的长度,返回值是这个串能够匹配后缀的最大前缀串长度

但是纯循环节构成的串中,这个返回值不包括第一个循环节

比如aabaabaab

fail[9]6 fail[6]3

提交过程

WA 没有注意至少两个循环节
AC

代码

#include <cstring>
#include <cstdio>
const int maxm=1e5+20;
char P[maxm];
int fail[maxm];
// the domain and range of fail array mean the length of correct string.
void getFail(int m){
fail[0]=fail[1]=0;
for (int i=1; i<m; i++){
int j=fail[i];
while (j && P[j]!=P[i]) j=fail[j];
fail[i+1]=((P[i]==P[j])?j+1:0);
}
} int main(void){
int T, len; scanf("%d", &T);
while (T--){
scanf("%s", P);
getFail(len=strlen(P)); int maxloop=len-fail[len];
if (len%maxloop) printf("%d\n", maxloop-len%maxloop);
else printf("%d\n", (len==maxloop)?maxloop:0);
} return 0;
}
Time Memory Length Lang Submitted
109ms 1688kB 581 G++ 2018-08-02 10:35:30

最新文章

  1. SQL Server数据库损坏、检测以及简单的修复办法
  2. [课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)
  3. Android : &lt;com.mobeta.android.dslv.DragSortListView-引用自定义控件包名错误
  4. List集合分组
  5. C#实现office文档转换为PDF或xps的一些方法( 转)
  6. (经常看看)jdk 设计模式
  7. Loadrunner结果分析Graphs
  8. C语言——指针
  9. thymeleaf下拉框从后台动态获取集合数据并回显选中
  10. python网页爬虫开发之三
  11. SQLSERVER最简单的同名数据库恢复过程.
  12. R中统计假设检验总结(一)
  13. android开发学习——day2
  14. Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
  15. Java volatile 的测试(Java代码实战-004)
  16. VCard介绍
  17. iOS App迁移(App Transfer)注意点
  18. pybot/robot命令参数说明【dos下执行命令pybot.bat --help查看】
  19. mysql数据库优化课程---14、常用的sql技巧
  20. Oracle中用户和方案的区别

热门文章

  1. 11 个使用 GNOME 3 桌面环境的理由
  2. IETF透露HTTP over QUIC 将重命名为HTTP/3 协议
  3. STM32 GPIO重映射(转)
  4. Mysql学习总结(35)——Mysql两千万数据优化及迁移
  5. C/C++ Swap without using extra variable
  6. org.apache.hadoop.ipc.Client: Retrying connect to server
  7. 接口測试-HAR
  8. Yocto tips (19): Yocto SDK Toolchian的使用
  9. HTML5中x-webkit-speech语音输入功能
  10. 【手势交互】9. PS Move