BZOJ2754 SCOI2012喵星球上的点名
绝世好题。
正当我犹豫不决时,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喵星球上的点名的更多相关文章
- BZOJ2754: [SCOI2012]喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 680 Solved: 314[Submit][Sta ...
- [BZOJ2754] [SCOI2012]喵星球上的点名解题报告|后缀数组
a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串来点名,每次读出一个串的 ...
- bzoj2754:[SCOI2012]喵星球上的点名(后缀自动机)
Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...
- BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2816 Solved: 1246[Submit][Status][Discuss] Descript ...
- BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机/后缀自动机)
Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...
- BZOJ2754 [SCOI2012]喵星球上的点名 SA+莫队+树状数组
题面 戳这里 题解 首先先把所有给出的姓名和询问全部接在一起,建出\(height\)数组. 某个串要包含整个询问串,其实就相当于某个串与询问串的\(lcp\)为询问串的长度. 而两个后缀\(Suff ...
- 【BZOJ2754】[SCOI2012]喵星球上的点名
[BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...
- BZOJ 2754: [SCOI2012]喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 649 Solved: 305[Submit][Sta ...
- BZOJ 2754: [SCOI2012]喵星球上的点名 [后缀数组+暴力]
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1906 Solved: 839[Submit][St ...
随机推荐
- 使用infinite-scroll实现Ghost博文列表的滚动加载
Ghost博客系统默认提供的博文列表为传统的翻页方式(通过点击上一页.下一页等按钮来切换),随着移动客户端的发展,瀑布流式的滚动加载方式得到广泛应用,有效地提高了用户浏览信息的流畅度.下面详述如何通过 ...
- NYOJ 257 郁闷的C小加(一) (字符串处理)
题目链接 描述 我们熟悉的表达式如a+b.a+b(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符 ...
- python作业类Fabric主机管理程序开发(第九周)
作业需求: 1. 运行程序列出主机组或者主机列表 2. 选择指定主机或主机组 3. 选择让主机或者主机组执行命令或者向其传输文件(上传/下载) 4. 充分使用多线程或多进程 5. 不同主机的用户名密码 ...
- svn add --no-ignore
提交新代码时:svn add --no-ignore /dir 不加的话可能会漏提交某些依赖或文件. Svn st -q --no-ignore. 提交时不需要加
- Elasticsearch5.0 安装问题集锦【转】
转自 Elasticsearch5.0 安装问题集锦 - 代码&优雅着&生活 - 博客园http://www.cnblogs.com/sloveling/p/elasticsearch ...
- tomcat+ngnix单机搭建集群及端口占用问题
1.将tomcat复制两份,如下: 2.新建环境变量,如下: 3.修改其中一个的配置文件,另一个保持不变,修改server.xml配置文件如下: <Server port="9005& ...
- jquery 通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)
jquery 通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素) $("ul").append("<li cla ...
- centos7下vi的用法
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- Lynx以纯文本的形式下载网页
Lynx是一款基于命令行的web浏览器 [root@test88 ~]# yum install lynx -y [root@test88 ~]# lynx www.baidu.com 以纯文本的形式 ...
- centos6.5 安装、启动vnc
一.安装vnc 1.确保当前账号是root2.查看本机是否已经安装vncserver rpm -qa|grep tigervnc 3.安装vncserver yum -y install tigerv ...