被自己学校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;
}

洛谷 P3121 【[USACO15FEB]审查(黄金)Censoring (Gold)】的更多相关文章

  1. 洛谷 P3121 [USACO15FEB]审查(黄金)Censoring (Gold) 【AC自动机+栈】

    这个和bzoj同名题不一样,有多个匹配串 但是思路是一样的,写个AC自动机,同样是开两个栈,一个存字符,一个存当前点在trie树上的位置,然后如果到了某个匹配串的末尾,则弹栈 #include< ...

  2. 洛谷P3121 审查(黄金)Censoring(Gold) [USACO15FEB] AC自动机

    正解:AC自动机 解题报告: 传送门! 啊我好呆啊其实就挺模板题的,,,只是要一个栈搞一下,,,然后我就不会了,,,是看了题解才get的,,,QAQ 然后写下解法趴QwQ 首先看到多串匹配不难想到AC ...

  3. P4824 [USACO15FEB]Censoring (Silver) 审查(银)&&P3121 [USACO15FEB]审查(黄金)Censoring (Gold)

    P3121 [USACO15FEB]审查(黄金)Censoring (Gold) (银的正解是KMP) AC自动机+栈 多字符串匹配--->AC自动机 删除单词的特性--->栈 所以我们先 ...

  4. P3121 [USACO15FEB]审查(AC自动机)

    题目: P3121 [USACO15FEB]审查(黄金)Censoring (Gold) 解析: 多字符串匹配,首先想到AC自动机 建立一个AC自动机 因为有删除和拼接这种操作,考虑用栈维护 顺着文本 ...

  5. 洛谷P3121 【[USACO15FEB]审查(黄金)Censoring (Gold)】

    双栈+AC自动机 这题其实跟一道KMP算法的题有一些渊源,它就是这道题的简单板. Clear: 给你两个串A,B,每次在B串中从左到右找串A,并将该子串删除,直到找不到为止,问你能删几次. 样例输入: ...

  6. P3121 [USACO15FEB]审查(黄金)Censoring (Gold)

    吐槽 数据太水了吧,我AC自动机的trie建错了结果只是RE了两个点,还以为数组开小了改了好久 思路 看到多模板串,字符串匹配,且模板串总长度不长,就想到AC自动机 然后用栈维护当前的字符串位置,如果 ...

  7. [洛谷P3121] 审查(黄金) (AC自动机)

    题目描述 FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过10^5的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t_1...t_N.他希望从S中删除这些单词. FJ每次在S中找 ...

  8. 洛谷 P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold)

    P3120 [USACO15FEB]牛跳房子(金)Cow Hopscotch (Gold) 就像人类喜欢跳格子游戏一样,FJ的奶牛们发明了一种新的跳格子游戏.虽然这种接近一吨的笨拙的动物玩跳格子游戏几 ...

  9. 洛谷P3120 [USACO15FEB]牛跳房子(动态开节点线段树)

    题意 题目链接 Sol \(f[i][j]\)表示前\(i\)行\(j\)列的贡献,转移的时候枚举从哪里转移而来,复杂度\(O(n^4)\) 然后考虑每一行的贡献,动态开节点线段树维护一下每种颜色的答 ...

随机推荐

  1. 深入解读Promise对象

    promise对象初印象: promise对象是异步编程的一种解决方案,传统的方法有回调函数和事件,promise对象是一个容器,保存着未来才会结束的事件的结果 promise对象有两个特点: 1.p ...

  2. SpringBoot 4.SpringBoot 整合 devtools 实现热部署

    一.添加 devtools 依赖 <!-- Spring boot 热部署 : 此热部署会遇到 java.lang.ClassCastException 异常 --> <!-- op ...

  3. java中级——集合框架【2】-二叉树

    二叉树 二叉树概念 首先我们要明确,二叉树由各种节点组成:还有就是二叉树特点:(1)每个节点都可以有左子节点,右子节点(2)每一个节点都有一个值 如图所示: 代码所示: package cn.jse. ...

  4. uwsgi加nginx部署django restframework前后端分离项目

    一.uwsgi和nginx简介 1.uwsgi(摘抄于百度百科): uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中HttpUwsgiModule的作用是与 ...

  5. mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱

    ​ mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱 ​ 前言:使用 mybatis generator 生成表格对应的pojo.dao.mapper,以及对应的example的 ...

  6. How to install rime on Debian

    apt-get install ibus ibus-rime librime-data-wubi reboot cp ~/.config/ibus/rime/default.yaml ~/.confi ...

  7. 学习 Spring (十四) Introduction

    Spring入门篇 学习笔记 Introduction 允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象 由 中的 元素声明该元素用于声明所匹配的类型拥有一个新的 p ...

  8. Running Web API using Docker and Kubernetes

    Context As companies are continuously seeking ways to become more Agile and embracing DevOps culture ...

  9. Mysql(Mariadb)数据库主从复制

    Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据 ...

  10. Centos 7安装和配置 ElasticSearch入门小白

    实验环境: 操作系统:Centos 7.5 服务器ip:192.168.1.198 运行用户:root 网络环境:Internet 在企业生产环境有很多服务器的时候.很多业务模块的日志的时候运维人员需 ...