[USACO15FEB]Censoring S

时间:2020-10-16
本文章向大家介绍[USACO15FEB]Censoring S ,主要包括[USACO15FEB]Censoring S 使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目链接:https://www.luogu.com.cn/problem/P4824

思路: 考虑kmp 匹配  然后 因为要删除掉 那么考虑用一个栈来维护删除   如果用数组记录那些位置删的话 不好处理之前删除的位置

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int maxn =1e6+10;
 6 const int mod=998244353;
 7 int nxt[maxn];
 8 int f[maxn];
 9 
10 
11 int main()
12 {
13     ios::sync_with_stdio(false);
14     cin.tie(0);
15     string s,t;
16     cin>>s>>t;
17     stack<int>st;
18     int n=s.size();
19 
20     int len=t.size();
21     int j=0;
22     for(int i=2;i<=len;i++)
23     {
24         while(j&&t[i-1]!=t[j])
25             j=nxt[j];
26         if(t[i-1]==t[j])
27             j++;
28         nxt[i]=j;
29     }
30     j=0;
31     for(int i=1;i<=n;i++)
32     {
33         st.push(i);
34         while(j&&s[i-1]!=t[j])
35             j=nxt[j];
36         if(s[i-1]==t[j])
37             j++;
38         f[i]=j;
39         if(j==len)
40         {
41             for(int x=0;x<len;x++)
42             {
43                 st.pop();
44             }
45             if(!st.empty())
46                 j=f[st.top()];
47             else
48                 j=0;
49         }
50     }
51     vector<int>cnt;
52     while(!st.empty())
53     {
54         cnt.pb(st.top());
55         st.pop();
56     }
57     reverse(cnt.begin(),cnt.end());
58     for(auto &v:cnt)
59         cout<<s[v-1];
60 
61 
62 
63 
64 }
View Code

 

$flag 上一页 下一页