bzoj2754: [SCOI2012]喵星球上的点名
传送门
事实证明,我肉眼debug了两个晚上,还是不及对拍效率高。
AC自动机写错了都毫不自觉的智障宸
因为数据水,写的暴力
//Achen #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #include<queue> #include<cmath> #include<map> #define For(i,a,b) for(int i=(a);i<=(b);i++) #define Rep(i,a,b) for(int i=(a);i>=(b);i--) const int N=400007; typedef long long LL; using namespace std; int n,m,a[N],ll[N],rr[N],ans2[N],cnt[N];template<typename T>void read(T &x) {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f; }map<int,int>ch[N]; #define IT map<int,int>::iterator int tot,rt,w[N],fail[N],ans[N]; void insert(int ql,int qr) {if(!rt) rt=++tot;int x=rt;For(i,ql,qr) {int c=a[i];if(!ch[x][c]) ch[x][c]=++tot;x=ch[x][c];} w[x]++; }queue<int>que; void get_fail() {que.push(rt);while(!que.empty()) {int x=que.front();que.pop();for(IT it=ch[x].begin();it!=ch[x].end();it++) {int y=it->second;if(x==rt) fail[y]=rt;else {int z=fail[x];for(;fail[z]&&!ch[z][it->first];z=fail[z]);if(ch[z][it->first]) fail[y]=ch[z][it->first];else fail[y]=rt;}que.push(y); }} }#define pr pair<int,int> pr sta[N]; int top; int qry(int ql,int qr) {int x=rt,rs=0;For(i,ql,qr) {int c=a[i];for(;fail[x]&&!ch[x][c];x=fail[x]);if(ch[x][c]) {x=ch[x][c]; if(w[x]) {rs+=w[x]; cnt[x]++;sta[++top]=make_pair(x,w[x]);w[x]=0; }int y=fail[x];while(w[y]) {rs+=w[y];sta[++top]=make_pair(y,w[y]);w[y]=0; cnt[y]++;y=fail[y];}}}while(top) {pr tp=sta[top--];w[tp.first]=tp.second;}return rs; } void calc(int ql,int qr) {int x=rt;For(i,ql,qr) {int c=a[i];x=ch[x][c];}printf("%d\n",cnt[x]); }//#define DEBUG int main() { #ifdef DEBUGfreopen("2754.in","r",stdin);freopen("2754.out","w",stdout); #endifread(n); read(m);For(i,1,n) {int len; read(len);ll[i]=a[0]+1;For(j,1,len) read(a[++a[0]]);a[++a[0]]=-1;read(len);For(j,1,len) read(a[++a[0]]);rr[i]=a[0];}For(i,1,m) {int len; read(len);ll[n+i]=a[0]+1;For(j,1,len) read(a[++a[0]]);rr[n+i]=a[0];insert(ll[n+i],rr[n+i]);}get_fail();For(i,1,n) ans[i]=qry(ll[i],rr[i]);For(i,1,m)calc(ll[n+i],rr[n+i]);For(i,1,n-1) printf("%d ",ans[i]);printf("%d",ans[n]);return 0; } /* 4 1 1 2 1 2 4 3 1 1 9 6 6 9 1 10 7 9 4 8 1 9 9 6 9 9 7 9 3 10 6 8 9 2 1 1 4 1 4 1 9 5 8 9 1 5 2 4 2 10 7 6 2 5 1 */
View Code
转载于:https://www.cnblogs.com/Achenchen/p/8561793.html
bzoj2754: [SCOI2012]喵星球上的点名相关推荐
- BZOJ2754: [SCOI2012]喵星球上的点名(AC自动机/后缀自动机)
Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...
- [BZOJ2754]-[SCOI2012]喵星球上的点名-AC自动机+树状数组
说在前面 感觉这题还是挺经典的 所以还是写了记录一下- 题目 BZOJ2754传送门 洛谷P2336传送门 看题可进传送门 题目-略长,概括起来有点麻烦 解法 读完这道题之后,可以发现实际上它就是要我 ...
- [BZOJ2754][SCOI2012]喵星球上的点名(后缀数组+莫队)
Address 洛谷P2336 BZOJ2754 LOJ#2374 Solution 考虑在每个人的姓和名之间插入一个无关的字符. 这样问题就转化成了一些主串和一些模式串,询问每个模式串能匹配到多少个 ...
- [BZOJ2754][SCOI2012]喵星球上的点名 后缀数组
不科学啊...这题暴力可过...感觉所有串都是a就可以卡掉啊... 我的做法就是先把姓名串和询问串全部连在一起,并打上分隔符,并记录每个字符属于哪个串,求出SA.对于每个询问就从它所在的位置左右扫he ...
- 洛谷2336 BZOJ2754 SCOI2012 喵星球上的点名 SA 莫队 二分
题目链接 题意: 有nnn个人,每个人有两个串,一个表示姓,一个表示名,这里用数字表示字符.有mmm次询问,对于每次询问,你要回答有多少个人的姓或者名至少有一个是给出的串的子串.最后再对于这nnn个人 ...
- 【BZOJ2754】[SCOI2012]喵星球上的点名
[BZOJ2754][SCOI2012]喵星球上的点名 题面 bzoj 洛谷 题解 这题有各种神仙做法啊,什么暴力\(AC\)自动机.\(SAM\)等等五花八门 我这个蒟蒻在这里提供一种复杂度正确且常 ...
- BZOJ 2754: [SCOI2012]喵星球上的点名
二次联通门 : BZOJ 2754: [SCOI2012]喵星球上的点名 /*BZOJ 2754: [SCOI2012]喵星球上的点名此题有N种做法...见到众dalao用各种奇怪的姿势AC此题..具 ...
- 洛谷 P2336 [SCOI2012]喵星球上的点名 解题报告
P2336 [SCOI2012]喵星球上的点名 题目描述 a180285 幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有 \(N\) 个喵星人,每个喵星人的 ...
- SCOI2012 喵星球上的点名 BZOJ 2754
2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 2246 Solved: 975 Description ...
最新文章
- retinaface mnn
- 《梦断代码》阅读笔记01
- allegro 16.6/17.4 中如何将实心焊盘显示为空心焊盘
- 通过btrace排查线上频繁Full GC的case 1
- python 中的input
- win7右键计算机管理参数错误,win7纯净版虚拟磁盘管理器参数错误怎么解决?
- 天下无难试之Redis面试刁难大全「原创」
- Linux下的Apache和PHP安全设置
- FlashDevelop 3.0.0 Rc2 版本下载
- smarty缓存控制
- 大学四年走来,这些网络工程师必备的模拟器我都给你整理好了
- P1322 logo语言
- CrossApp 0.4.2 发布,隆重推出 WebView
- 重置计算机的本地策略,手把手教你win10系统本地组策略重置恢复默认的详细方案...
- uniapp开发App调用微信授权登陆
- 人工智能辅助服装设计 | Mixlab论文带读
- 3D MAX界面操作教程及渲染技巧
- lcd与led的区别
- Android 使用fastboot命令刷机流程
- 我的Go+语言初体验——GO+的下载与安装
热门文章
- IDA 7.5 Demo 包含 Windows、Linux、macOS
- DevStack安装问题,git clone noVNC.git失败
- nafxcw.lib与LIBCMT.lib在vs2008中链接冲突解决方案
- 《Linux内核设计与实现》读书笔记(十八)- 内核调试
- java vtd-xml_在java中使用vtd-xml获取xml中的属性文本
- [攻防世界 pwn]——get_shell
- [Jarvis OJ - PWN]——Smashes
- java动态定义泛型_关于oop:具有动态性质且可完全自定义的Java泛型编程
- 关于 Unloading class sun.reflect.GeneratedSerial...
- 和我一起学 Selenium WebDriver