[NOI2011] 阿狸的打字机
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #include <bits/stdc++.h> |
| using namespace std; |
| const int M=2e5+5; |
| |
| char s[M]; |
| int n,m; |
| int idx[M],cnt=0; |
| int fa[M],ch[M][26],fail[M],tot; |
| |
| void init_tire() { |
| scanf("%s",s+1); |
| n=strlen(s+1); |
| int p=0; |
| for(int i=1;i<=n;i++) { |
| if(s[i]=='P')idx[++cnt]=p; |
| else if(s[i]=='B')p=fa[p]; |
| else { |
| int v=s[i]-'a'; |
| if(ch[p][v]==0)ch[p][v]=++tot,fa[ch[p][v]]=p; |
| p=ch[p][v]; |
| } |
| } |
| } |
| |
| void build() { |
| queue<int>q; |
| for(int i=0;i<26;i++) |
| if(ch[0][i])q.push(ch[0][i]); |
| while(!q.empty()) { |
| int now=q.front();q.pop(); |
| for(int i=0;i<26;i++) { |
| if(ch[now][i]) { |
| fail[ch[now][i]]=ch[fail[now]][i]; |
| q.push(ch[now][i]); |
| } |
| else ch[now][i]=ch[fail[now]][i]; |
| } |
| } |
| } |
| |
| int lowbit(int x) { |
| return x&-x; |
| } |
| |
| |
| int L[M],R[M],id=0; |
| vector<int>g[M]; |
| void dfs(int now,int fa) { |
| L[now]=++id; |
| for(auto to:g[now]) |
| if(to!=fa)dfs(to,now); |
| R[now]=id; |
| } |
| |
| int c[M]; |
| void add(int i,int v) { |
| while(i<=id) { |
| c[i]+=v; |
| i+=lowbit(i); |
| } |
| } |
| |
| int query(int i) { |
| int ans=0; |
| while(i) { |
| ans+=c[i]; |
| i-=lowbit(i); |
| } |
| return ans; |
| } |
| |
| #define fi first |
| #define se second |
| |
| int ans[M]; |
| vector<int>v[M]; |
| pair<int,int>q[M]; |
| void solve() { |
| int m;cin>>m; |
| for(int i=1;i<=m;i++) { |
| cin>>q[i].fi>>q[i].se; |
| v[q[i].se].push_back(i); |
| } |
| for(int i=0;i<=tot;i++)g[fail[i]].push_back(i); |
| dfs(0,0); |
| int p=0,cnt=0; |
| for(int i=1;i<=n;i++) { |
| if(s[i]=='P') { |
| cnt++; |
| for(auto j:v[cnt]) { |
| int x=idx[q[j].fi]; |
| ans[j]=query(R[x])-query(L[x]-1); |
| } |
| } |
| else if(s[i]=='B')add(L[p],-1),p=fa[p]; |
| else p=ch[p][s[i]-'a'],add(L[p],1); |
| } |
| for(int i=1;i<=m;i++)cout<<ans[i]<<'\n'; |
| } |
| |
| int main() { |
| init_tire(); |
| build(); |
| solve(); |
| return 0; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】