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