Cyclic Nacklace

节省篇幅不粘题面了。。。

看懂题后脑袋里略过KMP,学过但没怎么用过,又直接跳下一题了。。

题意:给定一个字符串,可以从两边加上一些字符使其有循环节。。求最少需要加多少字符。。

思路:补题的时候才发现就是next数组简单应用。用next数组求出自身最大匹配,剩下的即循环节的长度。然后用剩下的长度除去最大匹配中循环节的长度即可。

注:神奇的杭电用next做数组名会CE

(aabaa,abcabca)

const int N=1e5+10;
int t,len,ne[N];
char a[N];
void kmp_pre()
{
int i=0,j=-1;
ne[0]=j;
while(i<len)
{
while(j!=-1&&a[i]!=a[j]) j=ne[j];
ne[++i]=++j;
}
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%s",a);
len=strlen(a);
kmp_pre();
int ans=len-ne[len];
if(len!=ans&&len%ans==0) printf("0\n");
else printf("%d\n",ans-ne[len]%ans);
}
return 0;
}

再次加深对next数组的理解!

最新文章

  1. 微软的R语言发行版本MRO及开发工具RTVS
  2. jquery validate表单验证插件
  3. Hibernate的ORM原理和实现
  4. awk命令简单介绍
  5. 跨域访问-需要设置HTTP响应标头设置
  6. linux I/O
  7. laravel小抄
  8. Camel、Pastal、匈牙利标记法区别及联系
  9. I.MX6 Android U-blox miniPCI 4G porting
  10. InstallShield安装包中集成第三方安装包的方案选择[转]
  11. 深入浅出Java探针技术1--基于java agent的字节码增强案例
  12. 备份与还原ORACLE数据库(通过CMD命令执行)
  13. nodejs -- require , exports , module
  14. centos中单进程监控
  15. Java 中常见的各种排序算法汇总
  16. 混合开发 Hybird Ionic Angular Cordova web 跨平台 MD
  17. vue项目优化
  18. 如何让自己的exe程序开机自启动
  19. Mybatis之Configuration初始化(配置文件.xml的解析)
  20. C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表

热门文章

  1. input标签属性
  2. poj3436 Computer Factory
  3. canvas基础绘制-一个小球的坠落、反弹
  4. VC++编译出错:LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  5. Database coalesce
  6. SQLite_Home
  7. 一条update语句优化小记
  8. faster rcnn环境编译
  9. JavaEE-06 Servlet基础
  10. 第 6 章 Cinder - 061 - Boot from Volume