AC日记——[SCOI2012]喵星球上的点名 bzoj 2754
思路:
AC自动机暴力处理匹配;
强大的ac自动机,强大的fail树,强大的map,强大的vector,强大的指针;
代码:
#include <map>
#include <cstdio>
#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 80005
#define maxm 200005
#define maxlen 400005 struct TreeNodeType {
int tag,id; TreeNodeType *fail; map<int,TreeNodeType*>next; TreeNodeType()
{
tag=,id=,fail=NULL,next.clear();
}
};
struct TreeNodeType *que[maxlen],*root; int n,m,tot,ans2[maxn],ans1[maxn]; map<int,bool>vis; vector<int>name[maxn],times[maxm]; inline void in(int &now)
{
char Cget=getchar();now=;
while(Cget>''||Cget<'') Cget=getchar();
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
} int main()
{
freopen("name.in","r",stdin);
freopen("name.out","w",stdout);
root=new TreeNodeType,root->id=++tot;
in(n),in(m);int len,pos;
for(int i=;i<=n;i++)
{
in(len);
for(int j=;j<=len;j++) in(pos),name[i].push_back(pos);
name[i].push_back(-),in(len);
for(int j=;j<=len;j++) in(pos),name[i].push_back(pos);
name[i].push_back(-);
}
for(int i=;i<=m;i++)
{
in(len);TreeNodeType *now=root;
for(int j=;j<=len;j++)
{
in(pos);
if(now->next[pos]==NULL)
{
now->next[pos]=new TreeNodeType;
now->next[pos]->id=++tot;
}
now=now->next[pos];
}
now->tag++,times[now->id].push_back(i);
}
int h=,tail=;que[h]=root;
while(h<tail)
{
TreeNodeType *now=que[h++],*temp=NULL;
for(map<int,TreeNodeType*>::iterator it=now->next.begin();it!=now->next.end();it++)
{
if(now==root) it->second->fail=root;
else
{
temp=now->fail;
while(temp!=NULL)
{
if(temp->next[it->first])
{
it->second->fail=temp->next[it->first];
break;
}
temp=temp->fail;
}
if(temp==NULL) it->second->fail=root;
}
que[tail++]=it->second;
}
}
for(int i=;i<=n;i++)
{
len=name[i].size(),vis.clear();
TreeNodeType *now=root,*temp;
for(int j=;j<len;j++)
{
if(!vis[now->id])
{
vis[now->id]=true;
if(now->tag)
{
ans2[i]+=now->tag;
for(int v=;v<times[now->id].size();v++) ans1[times[now->id][v]]++;
}
TreeNodeType *temp=now->fail;
while(temp!=NULL)
{
if(!vis[temp->id])
{
vis[temp->id]=true;
if(temp->tag)
{
ans2[i]+=temp->tag;
for(int v=;v<times[temp->id].size();v++) ans1[times[temp->id][v]]++;
}
}
temp=temp->fail;
}
}
if(now->next[name[i][j]]) now=now->next[name[i][j]];
else
{
temp=now->fail;
while(temp!=NULL)
{
if(!vis[temp->id])
{
vis[temp->id]=true;
if(temp->tag)
{
ans2[i]+=temp->tag;
for(int v=;v<times[temp->id].size();v++) ans1[times[temp->id][v]]++;
}
}
if(temp->next[name[i][j]])
{
now=temp->next[name[i][j]];
TreeNodeType *pos=temp->fail;
while(pos!=NULL)
{
if(!vis[pos->id])
{
vis[pos->id]=true;
if(pos->tag)
{
ans2[i]+=pos->tag;
for(int v=;v<times[pos->id].size();v++) ans1[times[pos->id][v]]++;
}
}
pos=pos->fail;
}
break;
}
temp=temp->fail;
}
if(temp==NULL) now=root;
}
}
}
for(int i=;i<=m;i++) printf("%d\n",ans1[i]);
for(int i=;i<=n;i++)
{
if(i==) printf("%d",ans2[i]);
else printf(" %d",ans2[i]);
}
return ;
}
AC日记——[SCOI2012]喵星球上的点名 bzoj 2754的更多相关文章
- BZOJ 2754: [SCOI2012]喵星球上的点名 [AC自动机+map+暴力]
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1902 Solved: 837[Submit][St ...
- 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 ...
- 【BZOJ2754】[SCOI2012]喵星球上的点名
[BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...
- BZOJ2754: [SCOI2012]喵星球上的点名
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 680 Solved: 314[Submit][Sta ...
- P2336 [SCOI2012]喵星球上的点名(后缀自动机+莫队+dfs序)
P2336 [SCOI2012]喵星球上的点名 名字怎么存?显然是后缀自动机辣 询问点到多少个喵喵喵其实就是 查询后缀自动机上parent树的一个子树 于是我们考虑莫队 怎么树上莫队呢 我们用dfs序 ...
- 洛咕 P2336 [SCOI2012]喵星球上的点名
洛咕 P2336 [SCOI2012]喵星球上的点名 先求出SA和height,一个点名串对应的就是一段区间,还有很多个点,就转化成了 有很多个区间,很多个点集,对每个区间计算和多少个点集有交,对每个 ...
- 洛谷 P2336 [SCOI2012]喵星球上的点名 解题报告
P2336 [SCOI2012]喵星球上的点名 题目描述 a180285 幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有 \(N\) 个喵星人,每个喵星人的 ...
- BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机)
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2816 Solved: 1246[Submit][Status][Discuss] Descript ...
随机推荐
- Web-Servlet处理表单
- Delphi中取得程序版本号
Delphi做的程序,如果想包含版本信息, 必须在Delphi的集成编辑环境的菜单“Project/Options/Version Info”里面添加版本信息.即在Version Info 选项卡中选 ...
- 除了基本类型,其余类型基本上大部分new出来 java.sql 包下面要不需要new
除了基本类型,其余类型基本上大部分new出来 java.sql 包下面要不需要new
- Hadoop Yarn on Docker
搭建Hadoop Yarn on Docker 一.概览 Docker基于Linux Container技术整合了一堆易用的接口用于构建非常轻量级的虚拟机.Docker Container Execu ...
- NEYC 2017 游记
day 1: result: sum_rank: 11 school_rank:1 水题在你高估的时候就已经不水了 sum:有个快速乘类似快速幂: int ans=0; ...
- 我用JAVA做了个简易图像相似度计算器
简单说两句: 笔主利用这个七夕前后两天的寂寞时光,用JAVA磨了一个简单的图像相似度计算小程序,就在刚才终于纠结完毕,输出了1.0版本,小小的满足了一下可怜的虚荣心..→_→ 使用最简单最基础的感知哈 ...
- UVA10480:Sabotage(最小割+输出)
Sabotage 题目链接:https://vjudge.net/problem/UVA-10480 Description: The regime of a small but wealthy di ...
- LVS+Keepalived搭建MyCAT高可用負載均衡集群
1.前面我们已经搭建好mysql主主,并且用mycat实现双写功能,主要配置文件: [root@mycat2 conf]# cat schema.xml <?xml version=" ...
- CORS服务端跨域
跨域,通常情况下是说在两个不通过的域名下面无法进行正常的通信,或者说是无法获取其他域名下面的数据,这个主要的原因是,浏览器出于安全问题的考虑,采用了同源策略,通过浏览器对JS的限制,防止恶意用户获取非 ...
- es6+最佳入门实践(11)
11.async函数 async 函数是什么?一句话,它就是 Generator 函数的语法糖.通俗的说就是Generator函数的另一种写法,这种写法更简洁,除此之外,async函数还对Genrat ...