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在当前字符串中出现了几次?(作为连续子串) 你必须在线支 ...
随机推荐
- 再战CS231-数组的访问
1.切片访问和整形访问的区别 你可以同时使用整型和切片语法来访问数组.但是,这样做会产生一个比原数组低阶的新数组 import numpy as np # Create the following r ...
- oracle关键字作为字段名使用方法
有时我们在定义字段名及别名时所用名与oracle关键字同名,这时该如何处理呢? 其实很简单,只要在此关键字加上"",如"group" SQL> DROP ...
- python3之pymysql模块
1.python3 MySQL数据库链接模块 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 Pyt ...
- souce insight出错 There was an error opening project
souce insight出错 There was an error opening project: "...": Options->Preferences->Fol ...
- JavaScript 简单吗
英文:Aurélien Hervé 译文:众成翻译/msmailcode 这里有一些 Javascript初学者应该知道的技巧和陷阱.如果你已经是专家了,顺便温习一下. Javascript也只不过 ...
- Python爬虫学习1: Requests模块的使用
Requests函数库是学习Python爬虫必备之一, 能够帮助我们方便地爬取. Requests: 让HTTP服务人类. 本文主要参考了其官方文档. Requests具有完备的中英文文档, 能完全满 ...
- 学习总结——JMeter做http接口功能测试
JMeter对各种类型接口的测试 默认做接口测试前,已经给出明确的接口文档(如,http://test.nnzhp.cn/wiki/index.php?doc-view-59):本地配好了JMeter ...
- Java OOM学习
转载自原文: 什么是java OOM?如何分析及解决oom问题? 什么是OOM? OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",表现 ...
- R vs Python:载入包 import & library
数据科学:R & Python 工作 & Kaggle机器学习比赛 可重复函数式编程 一.Python模块的载入 包 Package 模块 module import pandas a ...
- 使用Emacs:帮助篇
当你打开emacs并认真阅读“快速指南”后,你已经知道用C-x C-f打开文件,用C-x C-s保存文件,用C-x C-c退出emacs,可以在emacs中生存了.这里把Tutorial.cn中出现的 ...