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 ...
随机推荐
- Java 里快如闪电的线程间通讯
这个故事源自一个很简单的想法:创建一个对开发人员友好的.简单轻量的线程间通讯框架,完全不用锁.同步器.信号量.等待和通知,在Java里开发一个轻量.无锁的线程内通讯框架:并且也没有队列.消息.事件或任 ...
- javascript中字符串的两种定义形式
1.var s = "this is a string"; var t = "this is also a string"; s.test = 20; 2.v ...
- 游戏的物理和数学:Unity中的弹道和移动目标提前量计算
下载地址:https://www.jianguoyun.com/p/DZPN6ocQ2siRBhihnx8 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺 ...
- python3学习笔记.1.初体验
最近工作烦得很 就想找点儿别的事情来做,于是想到了学学python. 因为是vs2017,所以就在里面安装了. 第一个程序肯定是Hello World了. 新建一个python应用程序 代码只有一行 ...
- ubuntu12.04 svn ssl错误
1,ubuntu12.04 svn ssl错误提示: OPTIONS of '<url>': SSL handshake failed: SSL error: Key usage viol ...
- 分布式系统的负载均衡以及ngnix负载均衡的五种策略
一般而言,有以下几种常见的负载均衡策略: 一.轮询. 特点:给每个请求标记一个序号,然后将请求依次派发到服务器节点中,适用于集群中各个节点提供服务能力等同且无状态的场景. 缺点:该策略将节点视为等同, ...
- HTML+CSS小技巧
网页标题前引入ico图标 <link rel="shortcut icon" href="img/icoTest.ico">
- POJ 2337 Catenyms(欧拉回(通)路:路径输出+最小字典序)
题目链接:http://poj.org/problem?id=2337 题目大意:给你n个字符串,只有字符串首和尾相同才能连接起来.请你以最小字典序输出连接好的单词. 解题思路:跟POJ1386一个意 ...
- go的匿名组合
golang也提供了继承机制,但采用组合的文法,因此称为匿名组合.与其他语言不同, golang很清晰地展示出类的内存布局是怎样的. 一 非指针方式的组合 1)基本语法 type base stru ...
- MYSQL-----控制流程函数(case when...then..else..end)
MySQL有一些内置的控制流程函数,可以在SQL语句中使用这些函数来更加准确和直接的结果. 第一种语法: case when [value] then result ................. ...