题意比较复杂,就不说了。

感觉这题目拿来恶心人的。。连输入都要花费好大功夫。表示这种题目经典套路啊,一般来说直接上AC自动机,暴力把大串往小串上贴,然后直接计算答案就行了,但是这数据大小简直了。。算了算发现离散也没用,表示不会用STL,于是去网上膜了一波做法,一脸懵逼,勉强看懂,如果考试肯定切不了这题。

听说正解是SA+主席树。

code(超丑。。):

#include<iostream>
#include<set>
#include<map>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<vector>
#include<queue>
#include<algorithm>
#include<cmath>
#define inf 1000000000
#define pa pair<int,int>
#define ll long long
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,m;
const int maxn=1e5+5,maxm=2e4+5;
int ans1[maxn],ans2[maxn];
vector<int> a[maxm],st[maxn],V,M;
map<int,int>to[maxn];
bool vis[maxn],mark[3*maxm];
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
struct data
{int cnt,ans;int fail[maxn],q[maxn];data(){cnt=1;fo(i,-1,10000)to[0][i]=1;fail[1]=0;}void insert(int id){int L=read(),x;int now=1;fo(i,1,L){x=read();if (!to[now][x])to[now][x]=++cnt;now=to[now][x];}st[now].push_back(id);}void buildfail(){int head=0,tail=1;q[0]=1;while (head!=tail){int now=q[head++];for(map<int,int>::iterator i=to[now].begin();i!=to[now].end();i++){int t=i->first,k=fail[now];while (!to[k][t])k=fail[k];fail[i->second]=to[k][t];q[tail++]=i->second;}}}void get(int id,int x){for(int i=x;i;i=fail[i])if(!vis[i]){vis[i]=1;V.push_back(i);for(int j=0;j<st[i].size();j++)if(!mark[st[i][j]]){mark[st[i][j]]=1;M.push_back(st[i][j]);ans1[st[i][j]]++;ans2[id]++;}}else break;}void solve(int x){int now=1;for(int i=0;i<a[x].size();i++){int t=a[x][i];while(!to[now][t])now=fail[now];now=to[now][t];get(x,now);}for(int i=0;i<V.size();i++)vis[V[i]]=0;for(int i=0;i<M.size();i++)mark[M[i]]=0;V.clear();M.clear();}
}trie;
int main()
{n=read(),m=read();int L,x;fo(i,1,n){L=read();while(L--)x=read(),a[i].push_back(x);a[i].push_back(-1);L=read();while(L--)x=read(),a[i].push_back(x);}fo(i,1,m)trie.insert(i);trie.buildfail();fo(i,1,n)trie.solve(i);fo(i,1,m)printf("%d\n",ans1[i]);fo(i,1,n){printf("%d",ans2[i]);if (i!=n)printf(" ");}return 0;
}

bzoj2754JZOJ2834【SCOI2012】喵星球上的点名 AC自动机+STL相关推荐

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

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

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

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

  3. [BZOJ2754]-[SCOI2012]喵星球上的点名-AC自动机+树状数组

    说在前面 感觉这题还是挺经典的 所以还是写了记录一下- 题目 BZOJ2754传送门 洛谷P2336传送门 看题可进传送门 题目-略长,概括起来有点麻烦 解法 读完这道题之后,可以发现实际上它就是要我 ...

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

    二次联通门 : BZOJ 2754: [SCOI2012]喵星球上的点名 /*BZOJ 2754: [SCOI2012]喵星球上的点名此题有N种做法...见到众dalao用各种奇怪的姿势AC此题..具 ...

  5. SCOI2012 喵星球上的点名 BZOJ 2754

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 2246 Solved: 975 Description ...

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

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

  7. 洛谷 P2336 [SCOI2012]喵星球上的点名 解题报告

    P2336 [SCOI2012]喵星球上的点名 题目描述 a180285 幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有 \(N\) 个喵星人,每个喵星人的 ...

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

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

  9. 洛谷 P2336 [SCOI2012]喵星球上的点名

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

最新文章

  1. 2021 IDEA大会开启AI思想盛宴,用“创业精神”做科研
  2. Google VC投资SDN初创公司Plexxi
  3. ant打包web项目
  4. python简单的小程序_初学python的一些简单程序(1)
  5. LeetCode 29 两数相除
  6. php使用mkdir创建多级目录入门例子
  7. Android 开发 Tips
  8. ACM及各类程序竞赛专业术语
  9. MSDN帮助文档 无法显示该网页 的问题解决方案(转)
  10. gcc,cc,g++,CC的区别
  11. 一、Oracle介绍
  12. python归并排序算法实现_python算法实现系列-归并排序
  13. 嵌入式Linux之文件系统启动分析【原创】
  14. 学习bert过程中的思考,少走弯路
  15. Nhibernate工具Profiler配置
  16. Lex和Yacc实现句子识别
  17. Data Base学习记录:关系模型
  18. 编译Android版本的chromium浏览器
  19. android9 apk自动安装功能,Android app自动更新总结(已适配9.0)
  20. window7系统为什么老是弹出交互式服务检测

热门文章

  1. Houdini vop
  2. python解二元一次方程_Python数据处理篇之Sympy系列(五)---解方程
  3. 基于现有电脑和手机,“掌上看家”帮你零投入远程照料家中儿童与老人
  4. 临床执业助理医师(综合练习)题库【4】
  5. 风险中性的深度学习选股策略
  6. 使用函数输出指定范围内的Fibonacci数
  7. 博通wifi驱动详解
  8. Wannafly挑战赛4,C题割草机,(模拟)
  9. 大连引入‘智慧路灯’助推‘智慧城区’建设,道路改造25基高杆灯
  10. 文献阅读---多年生黑麦草种质中与耐热性相关的生理性状、分子标记和叶绿素分解代谢基因的自然变异