【扩展kmp+最小循环节】HDU 4333 Revolving Digits
2017-08-20 13:37
351 查看
【题意】
给定一个数字<=10^100000,每次将该数的第一位放到放到最后一位,求所有组成的不同的数比原数小的个数,相等的个数,大的个数
【思路】
这个数很大,用字符串处理
比较两个字符串的大小,一位一位很耗时,可以求出最长公共前缀,只比较最长公共前缀后一位
每次将数的最后一位放到最后一位,如abcd变成dabc,cdab,bcda,相当于abcdabcd各个后缀的前四位
这样就变成了求abcdabcd的每个后缀与abcd的最长公共前缀,用扩展KMP线性求
abab这种情况按上面的做法abababab会考察ab,ba,ab,ba,有重复的,是因为abab=(ab)^2,所以还要考虑最小循环节去重
【AC】
扩展kmp计算最小循环节方法二:利用已知的next数组
【知识点】
扩展kmp的next数组与kmp数组的next含义不同,是字符串s的所有后缀和s本身的最长公共前缀
【坑点】
做这道题踩了各种坑
strcat函数的用法:strcat(s,s)是错误的,会T,strcat的两个参数传的是指针,就是s在内存里面的位置,这里两个s是同一个东西第一个s变长的时候,第二个s也会变长,然后就没完没了了
相关文章推荐
- HDU - 4333 Revolving Digits(拓展kmp+最小循环节)
- hdu 3746 Cyclic Nacklace (kmp扩展—最小循环节)
- HDU 4333 Revolving Digits【EXKMP求LCP&&KMP求最小循环节(串旋转)】
- HDU 4333 Revolving Digits(KMP:循环节+扩展KMP)
- HDU 4333 Revolving Digits (扩展KMP)
- hdu 4333 kmp+扩展kmp
- HDU 4333 Revolving Digits [扩展KMP]
- hdu 4333(扩展KMP)
- hdu4333 Revolving Digits(扩展kmp+kmp最小循环节)
- HDU 4333 Revolving Digits 扩展KMP
- Hdu 1358 Period (KMP 求最小循环节)
- hdu 3746 kmp求最小循环节长度
- HDU 4333 Revolving Digits [扩展KMP]【学习笔记】
- hdu 4333 Revolving Digits(扩展kmp)
- hdu 4333 Revolving Digits 扩展kmp
- (KMP 1.5)hdu 1358 Period(使用next数组来求最小循环节——求到第i个字符的循环节数)
- hdu 3746(KMP) 最小循环节
- hdu 4333 扩展KMP
- hdu 3746 Cyclic Nacklace (KMP求最小循环节)
- HDU 3746 Cyclic Nacklace(KMP最小循环节)