bzoj 2555
暴力。
收获:
1、第一道后缀自动机,大概知道怎么写了,有一些原理性的东西还要理解。
2、计算right集合的大小
/**************************************************************
Problem: 2555
User: idy002
Language: C++
Result: Accepted
Time:4708 ms
Memory:143072 kb
****************************************************************/ #include <cstdio>
#include <cstring>
#include <iostream>
#define fprintf(...)
#define N 1200010
using namespace std; int n, m;
char buf[N];
int aa[N], mask;
int son[N][], par[N], val[N], siz[N], last, root, ntot; int newnode( int v ) {
int nd=++ntot;
val[nd] = v;
return nd;
}
void init() {
root = last = newnode();
siz[root] = ;
}
void append( int c ) {
int p=last;
int np=newnode( val[p]+ );
for( ; p && !son[p][c]; p=par[p] ) son[p][c] = np;
if( p== ) {
par[np] = root;
} else {
int q = son[p][c];
if( val[q]==val[p]+ ) {
par[np] = q;
} else {
int nq = newnode( val[p]+ );
memcpy( son[nq], son[q], sizeof(son[nq]) );
par[nq] = par[q];
siz[nq] = siz[q];
par[np] = par[q] = nq;
for( ; p && son[p][c]==q; p=par[p] ) son[p][c]=nq;
}
}
last = np;
for( ; np; np=par[np] ) ++siz[np];
}
void append( const char *T ) {
fprintf( stderr, "append( %s )\n", T );
for( ; *T; T++ )
append( *T-'A' );
}
void decode( int mask ) {
fprintf( stderr, "%d\n", mask );
int n = strlen(buf);
for( int j=; j<n; j++ ) {
mask = (mask*+j)%n;
swap( buf[j], buf[mask] );
}
}
int query( const char *T ) {
fprintf( stderr, "query( %s )\n", T );
int n=strlen(T);
int u=root;
for( int i=; i<n; i++ ) {
int c=T[i]-'A';
if( !son[u][c] ) return ;
u=son[u][c];
}
return siz[u];
}
int main() {
scanf( "%d", &m );
scanf( "%s", buf );
init();
append( buf );
for( int i=; i<=m; i++ ) {
char ch[];
scanf( "%s%s", ch, buf );
decode(mask);
if( ch[]=='A' ) {
append(buf);
} else {
int ans = query(buf);
printf( "%d\n", ans );
mask ^= ans;
}
}
}
bzoj 2555的更多相关文章
- 【BZOJ 2555】SubString
http://www.lydsy.com/JudgeOnline/problem.php?id=2555 一个字符串在原串中的出现次数就是这个字符串对应后缀自动机上的状态的\(|Right|\),要求 ...
- bzoj 2555 SubString(SAM+LCT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2555 [题意] 给定一个字符串,可以随时插入字符串,提供查询s在其中作为连续子串的出现 ...
- bzoj 2555: SubString 后缀自动机+LCT
2555: SubString Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 688 Solved: 235[Submit][Status][Dis ...
- 字符串(LCT,后缀自动机):BZOJ 2555 SubString
2555: SubString Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1620 Solved: 471 Description 懒得写背景了 ...
- ●BZOJ 2555 SubString
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2555题解: 后缀自动机+LCT 不难发现,对于输入的询问串,在自动机里trans后的到的状态 ...
- 【BZOJ 2555】 2555: SubString (SAM+LCT)
2555: SubString Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 2548 Solved: 762 Description 懒得写背景了 ...
- bzoj 2555 SubString——后缀自动机+LCT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2555 要维护 right 集合的大小.因为 fa 会变,且 fa 构成一棵树,所以考虑用 L ...
- bzoj 2555 SubString —— 后缀自动机+LCT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2555 建立后缀自动机,就可以直接加入新串了: 出现次数就是 Right 集合的大小,需要查询 ...
- bzoj 2555: SubString
Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支 ...
随机推荐
- Indepence Mode 备份 weblogic
一般不在administation server 停止这个模式 管理服务器挂了,不会影响其他服务器的运行 备份一个domain copy 一个 /bin 把启动的脚本做一个修改 里面的doma ...
- bzoj 4816: 洛谷 P3704: [SDOI2017]数字表格
洛谷很早以前就写过了,今天交到bzoj发现TLE了. 检查了一下发现自己复杂度是错的. 题目传送门:洛谷P3704. 题意简述: 求 \(\prod_{i=1}^{N}\prod_{j=1}^{M}F ...
- UBIFS文件系统简介 与 利用mkfs.ubifs和ubinize两个工具制作UBI镜像 (完整理解版本)
UBI文件系统简介 在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs.jffs2.yaffs2等文件系统. 它们也都是基于文件系 统+mtd+flash设备的架 ...
- ### mysql系统结构_3_Mysql_Learning_Notes
mysql系统结构_3_Mysql_Learning_Notes 存储层,内存结构 全局(buferpool) 只分配一次 全局共享 连接/会话(session) 针对每个会话/线程分配 按需动态分配 ...
- C#.NET调用WSDL接口及方法
1.首先需要清楚WSDL的引用地址 如:http://XX.XX.4.146:8089/axis/services/getfileno?wsdl 上述地址的构造为 类名getfileno. 2.在.N ...
- css-概述和选择器
一:CSS 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与 ...
- centos7连接阿里云长时间连接不上
一.手动修改网卡配置 手上有几台centos7的linux,当连接阿里云的ecs服务器时候长时间连接不上,最后失败的问题. 使用 -vvv参数到如下语句就卡着不动了 ssh -vvv XXX.XXX. ...
- 洛谷P2746校园网
传送门啦 下面来看任务B.我们发现,图中只要存在入度为0的点和出度为0的点就永远不可能满足要求:" 不论我们给哪个学校发送新软件,它都会到达其余所有的学校 ".我们还发现,只要在入 ...
- Python基础 - 正则表达式
Python自带正则表达式模块,即re模块. 导入正则模块: import re 用dir()函数查看re模块内的属性和方法: dir(re)
- 获取矩形局域的方法,Rect、Bounds、Point
获取一个点和矩形区域的方法如下: var R: TRect; procedure TForm5.FormCreate(Sender: TObject); begin RadioGroup1.Items ...