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在当前字符串中出现了几次?(作为连续子串) 你必须在线支 ...
随机推荐
- 5 - django-csrf-session&cookie
目录 1 CSRF跨站请求伪造 1.1 CSRF攻击介绍及防御 1.2 防御CSRF攻击 1.2.1 验证 HTTP Referer 字段 1.2.2 在请求地址中添加 token 并验证 1.2.3 ...
- my.cnf 详解与优化【转】
MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用. #BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大#T ...
- MVVM设计模式的事件绑定
为什么要事件绑定 这个问题其实是很好理解的,因为事件是丰富多样的,单纯的命令绑定远不能覆盖所有的事件.例如Button的命令绑定能够解决Click事件的需求,但Button的MouseEnter.窗体 ...
- redis数据淘汰机制
volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用 的数据淘汰 volatile-ttl:从已设置过期时间的数据集(server.db[i ...
- poj1056
简单题 #include <iostream> #include <string> using namespace std; struct cnode { cnode *pze ...
- IntelliJ IDEA 修改IDE字体、代码字体。
IntelliJ IDEA 默认的 IDE 菜单字体太小,看着不舒服 ,我们调节下: ==============以上修改 仅仅针对的IDE字体,对代码的字体不生效. 所以如果代码 你觉得小 还得修改 ...
- redis主从,哨兵(windows版)
一.下载 由于redis官方并不支持windows操作系统,所以官网上是下不到的,需要到gitlab上下载,下载地址如下: https://github.com/MicrosoftArchive/re ...
- ROS数据可视化工具Rviz和三维物理引擎机器人仿真工具V-rep Morse Gazebo Webots USARSimRos等概述
ROS数据可视化工具Rviz和三维物理引擎机器人仿真工具V-rep Morse Gazebo Webots USARSimRos等概述 Rviz Rviz是ROS数据可视化工具,可以将类似字符串文本等 ...
- MySQL学习笔记:case when
一.MySQL case when的三种用法: 1.case 字段 when, 字段的具体值: select a.*, case sex when '1' then '男' else '女' end ...
- 2016-2017-2 20155309南皓芯《java程序设计》第九周学习总结
教材内容介绍 一 JDBC简介 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性 JDBC标准分为两个部分:J ...