#23382: 這題要用AC自動機(?


DE45A (一葉之秋)

學校 : 新北市立板橋高級中學
編號 : 68688
來源 : [1.172.153.123]
最後登入時間 :
2024-05-16 00:00:23
d990. 最終章-痛ましいです | From: [1.172.128.250] | 發表日期 : 2020-11-12 13:19

 我用Z value吃了TLE

#include<bits/stdc++.h>

using namespace std;

int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

int n;

string s,ss,t;

cin>>s>>n;

while(n--){

int z[200039]={},i,j,k,sum=0,l=1;

cin>>ss,t=ss+"$"+s+"*"; 

for(i=1;i<t.size();++i){

if(l+z[l]<=i){

j=0,k=i;

while(t[k]==t[j])++j,++k;

z[i]=j;

if(z[l]+l<z[i]+i)l=i;

}

else if(l+z[l]>i&&l+z[l]>i+z[i-l])z[i]=z[i-l];

else if(l+z[l]>i&&l+z[l]==i+z[i-l]){

j=z[i-l],k=l+z[l];

while(t[k]==t[j])++j,++k;

z[i]=j;

if(z[i]+i>z[l]+l)l=i;

}

else if(l+z[l]>i&&l+z[l]<i+z[i-l])z[i]=z[l]-i+l;

if(z[i]==ss.size())++sum;

}

cout<<sum<<"\n";

}

}

 
ZeroJudge Forum