日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符串周期--hdu 3746 Cyclic Nacklace

發布時間:2025/3/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串周期--hdu 3746 Cyclic Nacklace 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


通過這題得出了一個很重要的結論,在用kmp算法求出next數組后,len-next[len]的值就是該字符串的最小循環節,該字符串的其他循環節都是它的倍數,如果len恰好是len-next[len]的整數倍,那么該字符串就是個power string;如果next[len]為0,表示該字符串是非循環的;否則,按照len-next[len]的循環節,補齊最后一個循環節即為使該字符串成為power string的最小添加字符個數

思路:kmp+字符串的最小循環節問題

分析:
1 題目要求的是給定一個字符串,問我們還需要添加幾個字符可以構成一個由n個循環節組成的字符串。
2 可知我們應該先求出字符串的最小循環節的長度:假設字符串的長度為len,那么最小的循環節就是t = len-next[len] ; 如果有len%t == 0,那么這個字符串就是已經是完美的字符串,不用添加任何字符;如果不是完美的那么需要添加的字符數就是cir - (len-(len/t)*t)),相當與需要在最后一個循環節上面添加幾個。
3 如果t = 1,說明字符串只有一種字符例如“aaa” ; 如果t = m說明最小的循環節長度為m,那么至少還需m個;如果m%t == 0,說明已經不用添加了。

#include<stdio.h> #include<string.h> int next[100005]; char str[100005]; int len; void getnext() {int i,j=0;next[1]=0;for(i=2;i<=len;i++){while(j>0&&str[i]!=str[j+1])j=next[j];if(str[i]==str[j+1])j++;next[i]=j;} } int main() {int i,j,t,n;scanf("%d",&n);while(n--){ scanf("%s",str+1);len=strlen(str+1);memset(next,0,sizeof(next));getnext();t=len-next[len];if(t!=len&&len%t==0)puts("0");elseprintf("%d\n",t-next[len]%t);}return 0; }



總結

以上是生活随笔為你收集整理的字符串周期--hdu 3746 Cyclic Nacklace的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。