被自己学校OJ的毒瘤测评姬卡到自闭

Hash+栈+优化暴力

其实思路也很简单,就是把单词存进一个结构体,记录其哈希值和长度,然后就可以开始匹配了

但是,理论复杂度很高,为\(O(n*length)\)虽然实际体验效果不错

所以,为了卡过自家学校的OJ,加了一点小优化

额外维护一个数组\(num[i]\),记录以单词结尾字符的ascll码值为i的单词编号

这样的话,每次遍历的时候的元素个数,就会大大小于单词总个数,会比朴素算法快很多,虽然最坏复杂度还是\({O(n*length)}\)

不过还是祝愿我早日肝出AC自动机(我太菜了)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#pragma GCC optimize(3)
#pragma G++ optimize(3)
using namespace std;
const int base=131;
char a[1000010],b[1000010];
typedef unsigned long long ull;
char ans[1000010];
int lena,lenb,cnt;
ull ba[1000010];
ull h[1000010];
struct cc{
int len;
ull has;
}w[100010];
int g[300][1000],tot[300];
int main()
{
int n;
scanf("%s",a+1);
lena=strlen(a+1);
scanf("%d",&n);
for(register int i=1;i<=n;++i)
{
scanf("%s",b+1);
w[i].len=strlen(b+1);
ba[0]=1;
for(register int j=1;j<=w[i].len;++j)
w[i].has=w[i].has*base+b[j];//求每个单词的哈希值
++tot[b[w[i].len]];
g[b[w[i].len]][tot[b[w[i].len]]]=i;//统计单词
}
for(register int i=1;i<=100000;++i)
ba[i]=ba[i-1]*base;
for(register int i=1;i<=lena;++i)
{
++cnt;
ans[cnt]=a[i];
h[cnt]=h[cnt-1]*base+a[i];
int q=tot[a[i]];
for(register int j=1;j<=q;++j)//优化暴力
{
if(cnt-w[g[a[i]][j]].len>=0&&w[g[a[i]][j]].has==h[cnt]-h[cnt-w[g[a[i]][j]].len]*ba[w[g[a[i]][j]].len])
cnt-=w[g[a[i]][j]].len;
}
}
for(register int i=1;i<=cnt;++i)
putchar(ans[i]);
putchar("\n");
return 0;
}

最新文章

  1. [转] Agile Software Development 敏捷软件开发
  2. React 随笔二
  3. 开源项目IPProxys的使用
  4. MFC和GDI+一起使用
  5. 关于gcd函数解最大公约数
  6. Hibernate中inverse属性与cascade属性
  7. css清除浮动解决方案
  8. Spring-----事务配置的五种方式
  9. 使用 Nginx 创建服务器的负载均衡
  10. IS_EER分析
  11. C# 7.0 观察者模式 以及 delegate 和 event
  12. HTML5原生拖拽事件的值传递(三dataTransfer对象)
  13. nginx 增加 lua模块
  14. 【转】使用lockbits方法处理图像
  15. Openwrt TF Card Auto Mount&amp;Check (4)
  16. 【quickhybrid】组件(自定义)API的实现
  17. 微信小程序Tab选项卡切换大集合
  18. Mybatis中的@Param注解
  19. Spring MVC工作流程图
  20. Shell 命令行,实现对若干网站状态批量查询是否正常的脚本

热门文章

  1. 如何在 Linux 中查找最大的 10 个文件
  2. C#设计模式之1:策略模式
  3. 1 Servlet 简介
  4. js 判断一个字符在字符串中出现的次数
  5. Oracle调优总结
  6. flutter开发vscode用模拟器调试
  7. 二、启用Docker支持
  8. PHPStorm 配置命名空间
  9. Maven依赖范围及传递
  10. NPOI 上传Excel功能(二)