五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

洛谷P3804 后綴自動(dòng)機(jī) (SAM)

2022-04-26 13:27 作者:Clayton_Zhou  | 我要投稿

//?https://www.luogu.com.cn/problem/P3804

#include <algorithm>?

#include <cstdio>?

#include <iostream>

#include <vector>

#include <cstring>

#include <queue>

#define maxn 2000005

using namespace std;

struct node{

int ch[26];

int len,fa;

}a[maxn];

int num=1;

int np=1;

bool prefix[maxn]; // if it contains a prefix


void add(int c){

int p=np;np=++num;

prefix[np] = true;

a[np].len=a[p].len+1;

for(;p&&!a[p].ch[c];p=a[p].fa) a[p].ch[c]=np;

if(!p) a[np].fa=1;

else{

int q=a[p].ch[c];

if(a[q].len==a[p].len+1){ a[np].fa=q;

cout<<"? p="<<p<<" q="<<q<<"? ?a[p].len="<<a[p].len<<"? ?a[q].len="<<a[q].len<<"? np="<<np<<" a[np].fa="<<a[np].fa<<endl;

}

else{

int nq=++num;

a[nq]=a[q];

a[nq].len=a[p].len+1;

a[q].fa=a[np].fa=nq;

cout<<"? p="<<p<<" q="<<q<<"? ?a[p].len="<<a[p].len<<"? ?a[q].len="<<a[q].len<<" nq="<<nq<<"? ?a[nq].len="<<a[nq].len<<"? np="<<np<<" a[np].fa="<<a[np].fa<<endl;

for(;p&&a[p].ch[c]==q;p=a[p].fa) a[p].ch[c]=nq;

}

}

}


int siz[maxn]; // size of endpos

int deg[maxn];??

queue< int > q;??

void solve(){

while(!q.empty()) q.pop();

memset(deg,0,(num+1)<<2);

for(int i=1; i<=num; ++i) ?

++ deg[a[i].fa], siz[i] = 0;


?

for(int i=1; i<=num; ++i)

{

cout<< deg[i]<<"=deg[i], i= "<<i<<endl;


}

for(int i=1; i<=num; ++i)

if(!deg[i]) q.push(i);


while(!q.empty()){

int x = q.front(); q.pop();

if(prefix[x])?

++ siz[x];

if(a[x].fa == 1) continue;

siz[a[x].fa] += siz[x]; // transfer

if((-- deg[a[x].fa]) == 0)

q.push(a[x].fa);

}

long long ans = 0; // int overflow

for(int i=1; i<=num; ++i)

if(siz[i] > 1) // not only once

{

ans = max(ans,1ll*a[i].len*siz[i]);

cout<<i<<"=i,"<<a[i].len<<"=len,? siz[i]="<<siz[i]<<endl;

}

printf("%lld\n",ans);

}



char s[maxn]="aaba";

int main(){

//scanf("%s",s);

int len=strlen(s);

for(int i=0;i<len;i++) {

add(s[i]-'a');

cout<<"? i="<<i+1<<" s[i]="<<s[i]<<endl;

}


for(int i=1;i<=num;i++) {

cout<<"? i="<<i<<"? a[i].len="<<a[i].len<<"? ? ?a[i].fa="<<a[i].fa<<" prefix="<<prefix[i]<<endl;

}

solve();

return 0;

}


洛谷P3804 后綴自動(dòng)機(jī) (SAM)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平利县| 济源市| 湖南省| 曲阜市| 阿坝县| 聂荣县| 凤翔县| 扶绥县| 芒康县| 渭源县| 伊金霍洛旗| 沾益县| 闸北区| 尼木县| 公安县| 临高县| 肥城市| 靖宇县| 惠东县| 罗甸县| 高雄县| 建水县| 漳平市| 西盟| 延吉市| 白山市| 达拉特旗| 盱眙县| 和龙市| 湖南省| 台前县| 兰州市| 三原县| 桃园市| 黔西| 英吉沙县| 北京市| 旬阳县| 盐边县| 韶关市| 大余县|