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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ3998:[TJOI2015]弦论——题解

發布時間:2024/4/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ3998:[TJOI2015]弦论——题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.lydsy.com/JudgeOnline/problem.php?id=3998

https://www.luogu.org/problemnew/show/P3975

對于一個給定長度為N的字符串,求它的第K小子串是什么。

后綴自動機,對l排序然后從后往前推size和sum數組(貌似也可以叫拓撲?)。

size:當前狀態的字符串個數(貢獻)。

sum:以當前狀態為起點之后的滿足要求的字符串個數。

#include<cstdio> #include<iostream> #include<queue> #include<cstring> #include<algorithm> #include<cctype> using namespace std; typedef long long ll; const int N=1e6+5; struct tree{int a[26],fa,l; }tr[N]; char s[N]; int last,cnt,t,k; ll a[N],w[N],size[N],sum[N]; inline void insert(int c){int p=last,np=++cnt;last=np;tr[np].l=tr[p].l+1;for(;p&&!tr[p].a[c];p=tr[p].fa)tr[p].a[c]=np;if(!p)tr[np].fa=1;else{int q=tr[p].a[c];if(tr[p].l+1==tr[q].l)tr[np].fa=q;else{int nq=++cnt;tr[nq].l=tr[p].l+1;memcpy(tr[nq].a,tr[q].a,sizeof(tr[q].a));tr[nq].fa=tr[q].fa;tr[q].fa=tr[np].fa=nq;for(;p&&tr[p].a[c]==q;p=tr[p].fa)tr[p].a[c]=nq;}}size[np]=1; } int main(){scanf("%s%d%d",s,&t,&k);int len=strlen(s);last=cnt=1;for(int i=0;i<len;i++)insert(s[i]-'a');for(int i=1;i<=cnt;i++)w[tr[i].l]++;for(int i=1;i<=len;i++)w[i]+=w[i-1];for(int i=1;i<=cnt;i++)a[w[tr[i].l]--]=i;for(int i=cnt;i>=1;i--){if(t)size[tr[a[i]].fa]+=size[a[i]];else size[a[i]]=1;}size[1]=0;for(int i=cnt;i>=1;i--){sum[a[i]]=size[a[i]];for(int j=0;j<26;j++)if(tr[a[i]].a[j])sum[a[i]]+=sum[tr[a[i]].a[j]];}if(k>sum[1])puts("-1");else{int now=1;while(k>size[now]){k-=size[now];int i;for(int i=0;i<26;i++){if(k>sum[tr[now].a[i]])k-=sum[tr[now].a[i]];else{now=tr[now].a[i];putchar(i+'a');break;}}}puts("");}return 0; }

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+歡迎訪問我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

轉載于:https://www.cnblogs.com/luyouqi233/p/8776119.html

總結

以上是生活随笔為你收集整理的BZOJ3998:[TJOI2015]弦论——题解的全部內容,希望文章能夠幫你解決所遇到的問題。

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