【BZOJ2754】喵星球上的点名(AC自动机)

题面

BZOJ

题解

友情提示:此题请不要在cogs上提交,它的数据有毒

对于点名串构建\(AC\)自动机

然后把名字丢进去进行匹配,

大力统计一下答案即可

当然,要用\(map\)记录\(trie\)树

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 52000
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
void ReadStr(vector<int> &a)
{
int x=read();
a.resize(x+1);
a[0]=x;
for(int i=1;i<=x;++i)a[i]=read();
}
vector<int> nam[MAX],fam[MAX];
vector<int> sub[MAX];
map<int,int>::iterator it;
int n,m;
struct Node
{
map<int,int> son;
int ff,fl;
set<int> lst;
}t[MAX<<2];
int tot,vis[MAX],ans1[MAX],ans2[MAX];
void insert(vector<int> a,int g)
{
int now=0;
for(int i=1;i<=a[0];++i)
{
if(!t[now].son[a[i]])
t[now].son[a[i]]=++tot;
now=t[now].son[a[i]];
}
t[now].lst.insert(g);
t[now].fl=1;
}
void BuildFail()
{
queue<int> Q;
for(it=t[0].son.begin();it!=t[0].son.end();++it)Q.push(it->second);
while(!Q.empty())
{
int u=Q.front();Q.pop();
if(!t[u].son.size())continue;
for(it=t[u].son.begin();it!=t[u].son.end();++it)
{
int v=it->second,c=it->first,p=t[u].ff;
while(p&&!t[p].son[c])p=t[p].ff;
if(t[p].son[c])t[v].ff=t[p].son[c];
Q.push(v);
t[v].fl|=t[t[v].ff].fl;
}
}
}
void Work(vector<int> a,int str)
{
int now=0;
for(int i=1;i<=a[0];++i)
{
int c=a[i];
if(t[now].son[c])now=t[now].son[c];
else
{
while(now&&!t[now].son[c])now=t[now].ff;
if(t[now].son[c])now=t[now].son[c];
}
if(t[now].fl)
{
int p=now;
while(p)
{ for(set<int>::iterator it=t[p].lst.begin();it!=t[p].lst.end();++it)
if(vis[*it]!=str){ans1[*it]++;ans2[str]++;vis[*it]=str;}
p=t[p].ff;
}
}
}
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i)
{
ReadStr(nam[i]);
ReadStr(fam[i]);
}
for(int i=1;i<=m;++i)ReadStr(sub[i]);
for(int i=1;i<=m;++i)insert(sub[i],i);
BuildFail();
for(int str=1;str<=n;++str)
{
Work(nam[str],str);
Work(fam[str],str);
}
for(int i=1;i<=m;++i)printf("%d\n",ans1[i]);
for(int i=1;i<=n;++i){printf("%d",ans2[i]);(i==n)?putchar('\n'):putchar(' ');}
return 0;
}

【BZOJ2754】喵星球上的点名(AC自动机)的更多相关文章

  1. BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1902  Solved: 837[Submit][St ...

  2. BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机)

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2816  Solved: 1246[Submit][Status][Discuss] Descript ...

  3. BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机/后缀自动机)

    Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣.   假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...

  4. BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机、树状数组)

    吐槽: 为啥很多人用AC自动机暴力跳都过了?复杂度真的对么? 做法一: AC自动机+树状数组 姓名的问题,中间加个特殊字符连起来即可. 肯定是对点名串建AC自动机(map存儿子),然后第一问就相当于问 ...

  5. BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机+map维护Trie树)

    题目大意:略 由于字符集大,要用map维护Trie树 并不能用AC自动机的Trie图优化,不然内存会炸 所以我用AC自动机暴跳fail水过的 显然根据喵星人建AC自动机是不行的,所以要根据问题建 然而 ...

  6. 【BZOJ2754】[SCOI2012]喵星球上的点名

    [BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...

  7. P2336 [SCOI2012]喵星球上的点名(后缀自动机+莫队+dfs序)

    P2336 [SCOI2012]喵星球上的点名 名字怎么存?显然是后缀自动机辣 询问点到多少个喵喵喵其实就是 查询后缀自动机上parent树的一个子树 于是我们考虑莫队 怎么树上莫队呢 我们用dfs序 ...

  8. BZOJ2754: [SCOI2012]喵星球上的点名

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 680  Solved: 314[Submit][Sta ...

  9. BZOJ 2754: [SCOI2012]喵星球上的点名

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 649  Solved: 305[Submit][Sta ...

随机推荐

  1. LeetCode - 626. Exchange Seats

    Mary is a teacher in a middle school and she has a table seat storing students' names and their corr ...

  2. 像我这样优雅地进行Spring整合MongoDB

    本文重点是要将mongodb与spring整合到项目中去,在实践中发现问题,追踪问题,然后解决问题. 一.准备 Maven.Spring(spring-data-mongodb) spring Dat ...

  3. ThinkPHP的基本操作

    一.生成入口文件 1.打开服务器,在本地环境测试时在地址栏输入localhost/项目文件名/index.php  可以在Application下面生成一个home模块,记得在这之前,要建立一个项目文 ...

  4. php使用file_get_contents请求微信接口失败

    windows下的php,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了.Linux下的PHP,就必须安装openssl模块,安装好了以后就 ...

  5. prop&attr区别和用法,以多选框为例

    1.比较 相同点 : prop和attr作为jquery的方法都可以获取属性值; 不同点 : (1) 对于HTML元素本身就带有的固有属性,使用prop方法, attr获取checkbox的check ...

  6. Java经典编程题50道之二十五

    一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. public class Example25 {    public static void main(Stri ...

  7. php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释

    一.前言 一直对PHP的sapi是什么东西好奇,在网上一查都是各种说fpm cgi fastcgi php-cgi 直到看了鸟哥的这篇文章介绍戳这里,看到源码下的sapi目录才有所了解. 二.sapi ...

  8. Android Stdio 中的Rendering Problems Android N requires the IDE to be running with Java 1.8 or later Install a supported JDK解决办法

    出现如下图所示的错误 解决办法为: 然后在里面输入SDK 下载 下载APILevel为23版本的SDK 换成23版本的SDK 完美解决问题

  9. ErrorKiller:Failed to decode response: zlib_decode(): data error

    先更新composer自己,composer self-update 然后再更新依赖关系 composer update

  10. SpringMvc Json LocalDateTime 互转,form urlencoded @ModelAttribute 转换

    JDK8 的LocalDate 系列日期API ,比Date 或者 Calendar 都好用很多,但是在SpringMvc 自动装配会有点小问题 会导致抛出类似异常 default message [ ...