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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[hdu4333]Revolving Digits

發布時間:2025/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [hdu4333]Revolving Digits 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*注意注意:本題非hdu4333原題,而是簡化版,原版有多組數據。但此代碼在修改輸入后依舊可以通過多組數據*/

?

給出一個數字串,問有多少本質不同同構串比原串小,一樣,大.
同構串是指,對于原串S[1-N]通過旋轉變成同構串S[i-N]+S[0-i-1].
本質不同,指的是字符串不一樣.

輸入格式:

一行一個數字串

輸出格式:

一行,輸出本質不同的同構串比原串小,一樣,大的三個數,用一個空格分隔開。

樣例輸入:

123123

樣例輸出:

0 1 2

數據范圍:

數字串長度<=100000 首先,我們用KMP求得KMP中的next數組nex,這有什么用呢?其功能在于求出原字符串的循環節個數,以此保證計數的字符串本質不同 然后,設原字符串為s2,字符串s1=s2+s2。以s1為母串,s2為子串跑EKMP。 最后,對于每一個ex[i],大于等于s2的長度即從第i個位置開始的組成的數與原數相等,否則只要比較s[i]與s[i+next[i]](EKMP的next)。 #include<cstdio> #include<cstring> using namespace std; char s1[1000100],s2[1000100]; int ex[1000100],nxt[1000100],nex[1000100]; void get(char *s2){int m=strlen(s2);nex[0]=nex[1]=0;int j=0;for(int i=1;i<m;i++){while(j>0&&s2[i]!=s2[j])j=nex[j];if(s2[i]==s2[j])j++;nex[i+1]=j;} } void getex(char *s2){int j=0,n=strlen(s2);while(j+1<n&&s2[j+1]==s2[j])j++;nxt[0]=n;nxt[1]=j;int po=1,p=nxt[1]+1;for(int i=2;i<n;i++){int len=nxt[i-po];if(len+i<p)nxt[i]=len;else{int j=p-i;if(j<0)j=0;while(i+j<n&&s2[j]==s2[j+i])j++;nxt[i]=j;po=i;p=nxt[po]+po;}} } void exkmp(char *s1,char *s2){int j=0,n=strlen(s1),m=strlen(s2);while(s1[j]==s2[j]&&j<n&&j<m)j++;ex[0]=j;int po=0,p=ex[0];for(int i=1;i<n;i++){int len=nxt[i-po];if(len+i<p)ex[i]=len;else{int j=p-i;while(i+j<n&&j<m&&s1[j+i]==s2[j])j++;ex[i]=j;po=i;p=ex[po]+po;}} } int main(){scanf("%s",s2);int len=strlen(s2);for(int i=0;i<len;i++)s1[i]=s2[i],s1[i+len]=s2[i];getex(s2);exkmp(s1,s2);get(s2);int temp=len%(len-nex[len])==0?len/(len-nex[len]):1;int a=0,b=0,c=0;for(int i=0;i<len;i++){if(ex[i]>=len)b++;else if(s1[i+ex[i]]<s2[ex[i]])a++;else c++;}printf("%d %d %d",a/temp,b/temp,c/temp); }

?

轉載于:https://www.cnblogs.com/sffey/p/6889639.html

總結

以上是生活随笔為你收集整理的[hdu4333]Revolving Digits的全部內容,希望文章能夠幫你解決所遇到的問題。

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