标签:-- hdu 下标 一个 字符串 strlen next clu amp
通了个宵,还得去洗衣服,睡醒做题还时很舒服的,发现可能更适合一个人窝在寝室。
大佬请绕,菜鸡刺猬场
循环节......len - next[len], 基本我的next数组是从j=-1开始做的,没有系统学过KMP的小白只能总结成,next记录相同前缀的尽可能后面的下标,所以next [ i ] 同时记录了是从 1 开始计算的 第几个元素前缀相同。然后公式就很本能了。
HDU3746
题意 给你字符串,然后问在最后加上多少字符,可以使得整个字符串是循环的
在最后判别加多少个的时候好像有多种判别方式这里提供两种
#include <stdio.h> #include <string.h> const int maxn = 100000 +10; char s[maxn]; int next[maxn]; int len, length; void getnext() { int i=0, j = -1; next[0] = -1; while (i < len) { while (j != -1 && s[i] != s[j]) j = next[j]; next[++i] = ++j; } } int main() { int t; scanf("%d", &t); while (t--){ scanf("%s", s); len = strlen(s); getnext(); length = len - next[len]; // printf("length = %d = %d - %d\n", length, len, next[len]); if (len % length == 0 && len != length) { puts("0"); }else { //1 printf("%d\n", (length - len % length) == 0 ? (len) : (length - len % length)); //2 printf("%d\n", length - next[len] % length);//next可以确定最后一个元素在上一个周期里 //面的哪个位置,然后去掉前面的周期 } } return 0; }
标签:-- hdu 下标 一个 字符串 strlen next clu amp
原文地址:https://www.cnblogs.com/Urchin-C/p/11237260.html