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在当前字符串中出现了几次?(作为连续子串) 你必须在线支 ...
随机推荐
- 新手向-同步关键字synchronized对this、class、object、方法的区别
synchronized的语义 实验 分析 在看源代码时遇到多线程需要同步的时候,总是会看见几种写法,修饰方法.修饰静态方法.synchronized(Xxx.class).synchronized( ...
- 2 - django-urls路由系统基本使用
目录 1 路由系统(urls控制) 1.1 正则字符串参数 1.2 url的分组 1.2.1 无名分组 1.2.2 有名分组 1.3 URLconf 在什么上查找 1.4 include(路由分发) ...
- 读取文件和输入——read 脚本命令
Linux之read命令使用 read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入 ...
- 使用mui框架打开页面的几种不同方式
1.创建子页面: list.html就是index.html的子页面,创建代码比较简单,如下: mui.init({ subpages: [{ url: 'list.html', //子页面HTML地 ...
- SQL Server数据库存在判断语句及系统表简介
Transact-SQL Exists Sentences--判断数据库是否存在IF EXISTS(SELECT * FROM master.sysdatabases WHERE name=N'库名' ...
- GitHub正式启用声明
0x00 说明 GitHub账号很早之前就已经注册,几经常识都没有能够好好的将这座宝库应用好,实在是汗颜.今天特地将GitHub重新拾起,以后一定要好好使用这个利器,不要荒废了. 0x01 内容 Gi ...
- python学习day4软件目录结构规范
为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...
- 【AtCoder】ARC097 (C - F)题解
C - K-th Substring 题解 找出第K大的子串,重复的不计入 这个数据范围可能有什么暴力可以艹过去吧,但是K放大的话这就是后缀自动机板子题啊= = 代码 #include <ios ...
- C#一步一步学网络辅助开发(1)--常用抓包工具的使用
这次写的是一个系列,是让大家了解如何进行网络的辅助开发.要进行网络辅助开发抓包工具是必不可少的,下面就让大家熟悉一下常用的一些抓包工具, 1,Fiddler 这个工具是我目前用的最多的一款抓包工具,不 ...
- bzoj 1202: [HNOI2005]狡猾的商人
我居然用暴力跑过去了... 思路:两个区间合成一个新的区间才会产生冲突, 我们用并查集维护前缀和, 0 - n 个节点分别表示sum[ 0 ] - sum[ n ], d[ i ] 表示 前缀i 和它 ...