ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

审查(黄金)Censoring (Gold)

2019-07-08 11:01:44  阅读:282  来源: 互联网

标签:include 审查 Gold ll len next maxn const Censoring


题面

暴力玄学AC自动机

sign记录当前节点扫到AC自动机的哪个地方,我们开一个next数组和pre数组,记录当前这个点的后面那个点是几号、前面那个点是几号,每当发现一个能删去的字符串的时候,暴力跳到字符串头上的pre,将其的next修改为字符串尾的next,修改一下now,继续扫就行,这样也能A。因为要O(n)预处理一下next和pre,所以会比法1稍微慢一丢丢。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 typedef long long ll;
 7 const int maxn=100000+10;
 8 const ll b=131;
 9 ll Hash[maxn],Pow[maxn]={1};
10 char str[maxn],u[maxn],tmp[maxn];
11 struct Tmp
12 {
13     int len;
14     ll Hash;
15 }t[maxn];
16 bool cmp(const Tmp & a,const Tmp & b)
17 {
18     return a.len<b.len;
19 }
20 int ptr;
21 inline ll GetHash(int j,int i)
22 {
23     return Hash[i]-Hash[j-1]*Pow[i-j+1];
24 }
25 int main()
26 {
27     scanf("%s",str+1);
28     int n=strlen(str+1),m;
29     scanf("%d",&m);
30     for(int i=1;i<=m;++i)
31     {
32         scanf("%s",tmp+1);
33         t[i].len=strlen(tmp+1);
34         for(int j=1;j<=t[i].len;++j)
35             t[i].Hash=t[i].Hash*b+tmp[j];
36     }
37     sort(t+1,t+1+m,cmp);
38     for(int i=1;i<=n;++i)
39         Pow[i]=(Pow[i-1]*b);
40     for(int i=1;i<=n;++i)
41     {
42         u[++ptr]=str[i],Hash[ptr]=Hash[ptr-1]*b+u[ptr];
43         while(ptr<t[1].len&&i<n)u[++ptr]=str[++i],Hash[ptr]=Hash[ptr-1]*b+u[ptr];
44         for(int j=1;j<=m&&ptr;++j)
45             if(ptr-t[j].len+1>=1&&GetHash(ptr-t[j].len+1,ptr)==t[j].Hash){ptr-=t[j].len;}
46     }
47     for(int i=1;i<=ptr;++i)
48         putchar(u[i]);
49     puts("");
50     return 0;
51 }

 

 

标签:include,审查,Gold,ll,len,next,maxn,const,Censoring
来源: https://www.cnblogs.com/ainiyuling/p/11149849.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有