这题可以加深对KMP的懂得!
题意:给出一个字符串,对于它的每个(each)前缀(prefix)长度 i (2<=i),求能由一个子串构成这个前缀的最大字串数量。看例子可以清楚些吧。我是看别人的才知道的。具体看以参考:
http://jovesky.info/blog/2011/08/25/poj-1961-period-c-language-version/
例子:
字符串为aabaabaabaab
前2位也就是aa是a反复2次
前6位也就是aabaab是aab反复2次
前9位也就是aabaabaab是aab反复3次
前12位也就是aabaabaabaab是aab反复4次
解题思路:经由过程KMP的get_next.获得next[]的值。从2开端遍历每个next[i]值,然后用 i-next[j]即获得了反复字串的长度。。。(额,我当初没发明这个啊)。则i/(i-next[j])即为最大的个数。但同时必须是能整除的。
代码如下:
#include<iostream>
using namespace std;
const int Max = 1000005;
char str[Max];
int len, next[Max];
void get_next()
{
int j=1, k=0;
next[0] = -1;
next[1]=0;
while(j<len)
{
if(str[j] == str[k])
{
next[j+1]=k+1;
j++;
k++;
}
else if (k==0)
{
next[j+1]=0;
j++;
}
else k=next[k];
}
}
int main()
{
int i, testCase = 1;
while(scanf("%d", &len) && len)
{
scanf("%s", str);
get_next();
printf("Test case #%d\n", testCase++);
for(i = 2; i <= len; i ++)
if(next[i] != 0 && i % (i-next[i]) == 0)
printf("%d %d\n", i, i / (i-next[i]));
printf("\n");
}
return 0;
}
分享到:
相关推荐
* KMP 算法:例如 poj1961、poj2406。 4. 搜索: * 最优化剪枝和可行性剪枝。 * 搜索的技巧和优化:例如 poj3411、poj1724。 * 记忆化搜索:例如 poj3373、poj1691。 5. 动态规划: * 较为复杂的动态规划:...
如Trie树(前缀树)、KMP算法,用于字符串匹配和索引构建,见poj2513和poj1961。 #### 排序 快速排序、归并排序和堆排序等,不仅用于排序,也常用于解决与逆序数相关的问题,如poj2388。 #### 并查集 用于处理集合...
- (poj1961, poj2406):高效的字符串匹配算法。 ### 十、进阶状态压缩 1. **状态压缩技巧**: - 如何高效地表示和压缩状态。 2. **状态压缩优化**: - (poj3411, poj1724):进一步提高状态压缩动态规划的效率...
例如,题目poj1961和poj2406就是KMP算法的应用实例。 ### 7. 几何算法 几何算法涉及点、线、面的性质和关系,如凸包、最近点对、三角剖分等问题。这些算法在计算机图形学、地理信息系统等领域有着广泛的应用。例如...
7. **数学**:poj1286、poj2409等继续深入组合数学,poj1226、poj1961等训练了KMP算法,poj3440、poj3071等涉及概率问题和高斯消元法。 这个训练计划通过精心挑选的题目,逐步提升编程者的算法思维和实现能力,为...
- POJ 1961、POJ 2406:KMP算法的应用。 ### 其他问题 #### 贪心算法 - **题目示例**: - POJ 3411、POJ 1724:贪心策略的选择与应用。 #### 二分查找 - **题目示例**: - POJ 3373、POJ 1691:二分查找技术的...
- 推荐题目:[poj1961](https://vjudge.net/problem/POJ-1961)、[poj2406](https://vjudge.net/problem/POJ-2406) - 字符串匹配算法如KMP算法可以提高字符串匹配的效率。 以上列举的题目只是冰山一角,POJ上还有...
5. **字符串匹配**:如KMP算法(poj1961, poj2406)。 ### 十三、进阶算法 1. **组合优化**:如割平面法、分支定界法等(poj3411, poj1724)。 2. **近似算法**:解决NP难问题时的近似求解方法(poj3373, poj1691...
* KMP算法:POJ1961、POJ2406 * 左偏树(可合并堆) 四、搜索 * 最优化剪枝和可行性剪枝 * 较为复杂的动态规划:POJ1191、POJ1054、POJ3280、POJ2029、POJ2948、POJ1925、POJ3034 * 记录状态的动态规划:POJ3254、...
ACM常用算法及其相应的练习题 本资源总结了 ACM 竞赛中常用的算法和相应的练习题,涵盖了基础算法、图算法、数据... + poj1961, poj2406 四、搜索 * 最优化剪枝和可行性剪枝 * 搜索的技巧和优化 + poj3411, poj1724
3. KMP 算法(poj1961, poj2406) 4. 左偏树(可合并堆) 四、搜索 1. 最优化剪枝和可行性剪枝 2. 较为复杂的动态规划(如动态规划解特别的施行商问题等) 3. 记录状态的动态规划 4. 树型动态规划 五、计算几何学...
- 示例题目:poj1961, poj2406 #### 高级动态规划 1. **矩阵乘法** - 示例题目:poj1191, poj1054, poj3280, poj2029, poj2948, poj1925, poj3034 2. **四边形不等式** - 示例题目:POJ3254, poj2411, poj1185...
- **示例题目**: POJ 3267, POJ 1836, POJ 1260, POJ 2533, POJ 3176, POJ 1080, POJ 1159 - **注意事项**: 理解每种模型的状态定义和转移方程。 #### 六、数学 **1. 组合数学** - **定义**: 研究组合结构的...
6. **KMP算法**(如poj1961, poj2406):高效的字符串匹配算法,适用于文本检索、模式识别等领域。 #### 优化技巧 1. **代码优化**(如poj3096, poj3007):包括循环展开、条件判断优化等,提高代码执行效率。 2. ...
* 中短代码:1014、1281、1618、1928、1961、2054、2082、2085、2213、2214、2244、2247、2255、2257、2258、2260、2265、2272、2273、2275、2287、2299、2329、2376 * 中等代码量:1001、1018、1037、1039、1054、...
1046,1129 1149 1154 1165 1182 1185 1190 1191 1201 1251 1273 1275 1276 1286 1322 1338 1363 1364 1401 1456 1459 1564 1579 1637 1657 1658 1679 1716 1742 1775 1797 1711 1833 1838 1844 1882 1929 1942 1961 ...
1001 1002 1003 1004 1005 1006 1007 1008 1011 1012 1013 1014 1015 1017 ...1961 1979 1988 2000 2017 2075 2080 2081 2084 2105 2109 2127 2136 2140 2141 2153 2182 2192 2196 2201 2231 2243 2245 2247 2250 2253 ...