绝世好题。

正当我犹豫不决时,hzwer说:“MAP!!!”

没错这题大大的暴力,生猛的stl,贼基尔爽,,ԾㅂԾ,,

由于我们求点名在名字中的子串个数,所以将点名建AC自动机,记录节点属于哪次点名,每次带着这位同学的所有名字去里面扫,注意判重

复杂度20000*100000以及玄学的stl复杂度。

By:大奕哥

 #include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
int ans1[N],ans2[N],fail[N],n,m,cnt;
map<int,int>t[N];
vector<int>pos[N],a[N];
queue<int>q;
void build(int id)
{
int x,k;scanf("%d",&x);int now=;
for(int i=;i<=x;++i)
{
scanf("%d",&k);
if(!t[now][k])t[now][k]=++cnt;
now=t[now][k];
}
pos[now].push_back(id);
}
void getfail()
{
for(map<int,int>::iterator i=t[].begin();i!=t[].end();++i)
{
int u=i->second;
q.push(u);
fail[u]=;
}
while(!q.empty())
{
int x=q.front();q.pop();
for(map<int,int>::iterator i=t[x].begin();i!=t[x].end();++i)
{
int c=i->first,u=i->second;
q.push(u);
int k=fail[x];
while(k&&!t[k][c])k=fail[k];
fail[u]=t[k][c];
}
}
}
bool v[N],mark[N];
vector<int>H,M;
void get(int x,int p)
{
for(int i=p;i;i=fail[i])
{
if(v[i])return;
v[i]=;H.push_back(i);
for(int j=;j<pos[i].size();++j)
if(!mark[pos[i][j]])
{
mark[pos[i][j]]=;
ans1[pos[i][j]]++;
ans2[x]++;
M.push_back(pos[i][j]);
}
}
return;
}
void find(int x,vector<int>g)
{
int ans=,now=,l=g.size();
for(int i=;i<l;++i)
{
int c=g[i];
while(now&&!t[now][c])now=fail[now];
now=t[now][c];
get(x,now);
}
for(int i=;i<H.size();++i)v[H[i]]=;
for(int i=;i<M.size();++i)mark[M[i]]=;
H.clear();M.clear();
return;
}
int main()
{
scanf("%d%d",&n,&m);int x,k;
for(int i=;i<=n;++i)
{
scanf("%d",&x);
for(int j=;j<=x;++j)
scanf("%d",&k),a[i].push_back(k);
a[i].push_back(-);//添加非法字符防止姓和名连在一起成一个子串
scanf("%d",&x);
for(int j=;j<=x;++j)
scanf("%d",&k),a[i].push_back(k);
}
for(int i=;i<=m;++i)build(i);
getfail();
for(int i=;i<=n;++i)
find(i,a[i]);
for(int i=;i<=m;++i)printf("%d\n",ans1[i]);
for(int i=;i<n;++i)printf("%d ",ans2[i]);
printf("%d",ans2[n]);
return ;
}

BZOJ2754 SCOI2012喵星球上的点名的更多相关文章

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

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

  2. [BZOJ2754] [SCOI2012]喵星球上的点名解题报告|后缀数组

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

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

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

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

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

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

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

  6. BZOJ2754 [SCOI2012]喵星球上的点名 SA+莫队+树状数组

    题面 戳这里 题解 首先先把所有给出的姓名和询问全部接在一起,建出\(height\)数组. 某个串要包含整个询问串,其实就相当于某个串与询问串的\(lcp\)为询问串的长度. 而两个后缀\(Suff ...

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

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

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

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

  9. BZOJ 2754: [SCOI2012]喵星球上的点名 [后缀数组+暴力]

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

随机推荐

  1. Xcode变量概览-summary

    问题描述 在Xcode中断点调试时,鼠标停留在变量上,就能看到变量的信息.但对于自定义对象,通常Xcode提供的直接信息非常有限,像这样 想要了解这个对象具体的内容,需要展开左边的箭头 当开发者想要知 ...

  2. css3图片响应式布局

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. php常用函数——数组函数

    php常用函数——数组函数

  4. JavaScript 判断手机端访问并跳转 redirect mobile

    假如你的手机端网站在 /m 目录下 (function(a,b){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer| ...

  5. CentOS 6.6下目录结构及其主要作用

    今天我们总结一下CentOS 6.6的linux的目录结构,一个系统的目录众多,这里我们主要认识一下,根目录下的主要目录,首先我们可以通过tree命令查看一次根目录下一层目录都有什么目录, 补充:不能 ...

  6. 64_p7

    python-flask-whooshalchemy-0.6-10.fc26.noarch.rpm 12-Feb-2017 11:04 51894 python-flask-wtf-0.10.0-8. ...

  7. 94.Binary Tree Inorder Traversal---二叉树中序非递归遍历

    题目链接 题目大意:中序遍历二叉树.先序见144,后序见145. 法一:DFS,没啥说的,就是模板DFS.代码如下(耗时1ms): public List<Integer> inorder ...

  8. Linux Supervisor的安装与使用入门---SuSE

    Linux Supervisor的安装与使用入门 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事 ...

  9. system()函数

    windows下system () 函数详解 windows操作系统下system () 函数详解(主要是在C语言中的应用) 函数名: system   功 能: 发出一个DOS命令   用 法: i ...

  10. ASP连接读写ACCESS数据库实例(转)

    (一)   数据库的选择:有许多的数据库你可以选择,SQL SERVER.ACCESS(*.mdb).EXCEL(*.xls).FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储 ...