HDU

来源:互联网 发布:sql中is null什么意思 编辑:程序博客网 时间:2024/05/18 14:26

传送门
//题意: 问使得最少让所有字符循环两次最少需要添加的字符数量. (如果循环次数超过两次, 但循环没有完整, 也必须添加一定的字符).
//思路: next数组的深入理解, 首先我们可以很清楚的知道要先求循环节长度. 那么循环节长度可以直接通过 总长 - next[总长]得到. 这是证明
然后就可以直接判断输出了.

AC Code

const int maxn = 1e5+5;int cas=1;char zc[maxn], pp[maxn];int Next[maxn];void getnext(char *s, int len) {    int t1 = 0, t2;    Next[0] = t2 = -1;    while(t1 < len){        if(t2 == -1 || s[t1] == s[t2])            Next[++t1] = ++t2;        else t2 = Next[t2];    }}void solve(){    scanf("%s",pp);    int m = strlen(pp);    getnext(pp,m);    int len = m - Next[m]; //注意下标关系.求出循环节.    if(m != len && m%len == 0) printf("0\n");    else printf("%d\n",len - Next[m] % len);  //mod是去掉多余循环的部分,只留一个.    //abcabcab  去掉abc.}
原创粉丝点击