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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

SPOJ7258 SUBLEX - Lexicographical Substring Search

發(fā)布時(shí)間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SPOJ7258 SUBLEX - Lexicographical Substring Search 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

傳送門[洛谷]

心態(tài)崩了我有妹子

靠 我寫的記憶化搜索 莫名WA了 然后心態(tài)崩了

當(dāng)我正要改成bfs排序的時(shí)候 我靈光一動(dòng) md我寫的i=0;i<25;i++???

然后 改過(guò)來(lái)就A掉了T^T

大體做法就是 一個(gè)點(diǎn)出發(fā)的本質(zhì)不同子串?dāng)?shù)量應(yīng)該是就是所有添加字符的轉(zhuǎn)移和其余選一個(gè)空串的轉(zhuǎn)移

所以直接建出自動(dòng)機(jī)然后 我的做法是直接記憶化搜索就可以省去建樹/排序 因?yàn)樗凶哟囟ㄓ赊D(zhuǎn)移構(gòu)成 所以可以直接記憶化

附代碼。(我覺得這個(gè)做法巨強(qiáng)無(wú)比)

#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define inf 20021225 #define ll long long #define mxn 90010 using namespace std;struct node{int ch[26],fa,len,f;}t[mxn*4]; int poi,cnt,lt,rt;char ch[mxn]; int id(char c){return c-'a';} void insert(int c) {int p=lt,np=lt=++poi; t[np].len=t[p].len+1;for(;p&&!t[p].ch[c];p=t[p].fa) t[p].ch[c]=np;if(!p){t[np].fa=rt;return;}int q=t[p].ch[c];if(t[q].len==t[p].len+1){t[np].fa=q;return;}int nq=++poi; t[nq].len=t[p].len+1;memcpy(t[nq].ch,t[q].ch,sizeof(t[q].ch));t[nq].fa=t[q].fa; t[q].fa=t[np].fa=nq;for(;p&&t[p].ch[c]==q;p=t[p].fa) t[p].ch[c]=nq; } int query(int x) {if(~t[x].f) return t[x].f;t[x].f=1;for(int i=0;i<26;i++)if(t[x].ch[i])t[x].f+=query(t[x].ch[i]);return t[x].f; } int n; void getans(int pos,int k) {if(!k) return;for(int i=0;i<26;i++)if(t[pos].ch[i]){if(t[t[pos].ch[i]].f<k) k-=t[t[pos].ch[i]].f;else{ch[++n]=i+'a';getans(t[pos].ch[i],k-1);break;}} } int main() {scanf("%s",ch+1);n=strlen(ch+1);rt=lt=++poi;for(int i=1;i<=n;i++) insert(id(ch[i]));for(int i=1;i<=poi;i++) t[i].f=-1;query(rt);//for(int i=1;i<=poi;i++) printf("%d\n",t[i].f);int T;scanf("%d",&T);while(T--){for(int i=1;i<=n;i++) ch[i]=0;int k;scanf("%d",&k);n=0;getans(rt,k);for(int i=1;i<=n;i++) printf("%c",ch[i]);printf("\n");}return 0; }

?

總結(jié)

以上是生活随笔為你收集整理的SPOJ7258 SUBLEX - Lexicographical Substring Search的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。