HDU-3746 Cyclic Nacklace 字符串匹配 KMP算法 求最小循环节
2024-09-02 17:36:47
题目链接: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 |
最新文章
- SQL Server数据库损坏、检测以及简单的修复办法
- [课程设计]Scrum 3.3 多鱼点餐系统开发进度(下单详细信息页面设计)
- Android : <;com.mobeta.android.dslv.DragSortListView-引用自定义控件包名错误
- List集合分组
- C#实现office文档转换为PDF或xps的一些方法( 转)
- (经常看看)jdk 设计模式
- Loadrunner结果分析Graphs
- C语言——指针
- thymeleaf下拉框从后台动态获取集合数据并回显选中
- python网页爬虫开发之三
- SQLSERVER最简单的同名数据库恢复过程.
- R中统计假设检验总结(一)
- android开发学习——day2
- Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
- Java volatile 的测试(Java代码实战-004)
- VCard介绍
- iOS App迁移(App Transfer)注意点
- pybot/robot命令参数说明【dos下执行命令pybot.bat --help查看】
- mysql数据库优化课程---14、常用的sql技巧
- Oracle中用户和方案的区别
热门文章
- 11 个使用 GNOME 3 桌面环境的理由
- IETF透露HTTP over QUIC 将重命名为HTTP/3 协议
- STM32 GPIO重映射(转)
- Mysql学习总结(35)——Mysql两千万数据优化及迁移
- C/C++ Swap without using extra variable
- org.apache.hadoop.ipc.Client: Retrying connect to server
- 接口測试-HAR
- Yocto tips (19): Yocto SDK Toolchian的使用
- HTML5中x-webkit-speech语音输入功能
- 【手势交互】9. PS Move