HIHOcoder 1441 后缀自动机一·基本概念
思路
SAM的概念题
暴力模拟就好了
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
set<int> St[2511];
const int base = 131;
int setcnt=0,minlens[2511],minlent[2511],maxlens[2511],maxlent[2511],n,lens,lent;
char s[2511],t[2511];
unsigned long long hashs[120],powh[120];
void init(void){
for(int i=1;i<=2510;i++){
minlent[i]=0x3f3f3f3f;
maxlens[i]=1;
}
powh[0]=1;
for(int i=1;i<=100;i++)
powh[i]=powh[i-1]*base;
}
unsigned long long hashf(int l,int r){
return hashs[r]-hashs[l-1]*powh[r-l+1];
}
int main(){
init();
scanf("%s",s+1);
lens=strlen(s+1);
for(int i=1;i<=lens;i++){
hashs[i]=hashs[i-1]*base+s[i];
}
for(int l=1;l<=lens;l++)
for(int r=l;r<=lens;r++){
set<int> S;
while(S.size())
S.erase(S.begin());
for(int i=1;i<=lens-(r-l+1)+1;i++)
if(hashf(i,i+(r-l+1)-1)==hashf(l,r))
S.insert(i+(r-l+1)-1);
bool f=false;
// for(int k=l;k<=r;k++)
// putchar(s[k]);
// putchar('\n');
// for(set<int>::iterator it=S.begin();it!=S.end();it++)
// printf("%d ",(*it));
// printf("\n");
for(int i=1;i<=setcnt;i++){
if(S==St[i]){
// printf("into %d\n",i);
f=true;
if(minlent[i]-minlens[i]+1>r-l+1){
minlent[i]=r;
minlens[i]=l;
}
if(maxlent[i]-maxlens[i]+1<r-l+1){
maxlent[i]=r;
maxlens[i]=l;
}
break;
}
}
if(!f){
// printf("New\n");
++setcnt;
St[setcnt]=S;
minlens[setcnt]=maxlens[setcnt]=l;
minlent[setcnt]=maxlent[setcnt]=r;
}
}
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",t+1);
lent=strlen(t+1);
unsigned long long hashval=0;
set<int> S;
while(S.size())
S.erase(S.begin());
for(int j=1;j<=lent;j++)
hashval=hashval*base+t[j];
// printf("hasf=%lld %lld\n",hashf(2,5),hashval);
for(int j=1;j<=lens-lent+1;j++)
if(hashf(j,j+lent-1)==hashval)
S.insert(j+lent-1);
// for(set<int>::iterator it=S.begin();it!=S.end();it++)
// printf("%d ",(*it));
// printf("\n");
for(int j=1;j<=setcnt;j++){
if(S==St[j]){
for(int k=minlens[j];k<=minlent[j];k++)
putchar(s[k]);
putchar(' ');
for(int k=maxlens[j];k<=maxlent[j];k++)
putchar(s[k]);
putchar(' ');
for(set<int>::iterator it = S.begin();it!=S.end();it++)
printf("%d ",(*it));
printf("\n");
break;
}
}
}
return 0;
}
HIHOcoder 1441 后缀自动机一·基本概念的更多相关文章
- 【后缀自动机】hihocoder1441 后缀自动机一·基本概念
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi:今天我们来学习一个强大的字符串处理工具:后缀自动机(Suffix Automaton,简称SAM).对于一个字符串 ...
- hihoCoder #1465 : 后缀自动机五·重复旋律8
http://hihocoder.com/problemset/problem/1465 求S的循环同构串在T中的出现次数 将串S变成SS 枚举SS的每个位置i,求出以i结尾的SS的子串 与 T的最长 ...
- hihoCoder #1445 : 后缀自动机二·重复旋律5
#1445 : 后缀自动机二·重复旋律5 时间限制:10000ms 单点时限:2000ms 内存限制:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数 ...
- HIHOcoder 1457 后缀自动机四·重复旋律7
思路 后缀自动机题目,题目本质上是要求求出所有不同的子串的和,SAM每个节点中存放的子串互不相同,所以对于每个节点的sum,可以发现是可以递推的,每个点对子节点贡献是sum[x]*10+c*sz[x] ...
- hihocoder 1457 后缀自动机四·重复旋律7 求不同子串的和
描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的是小Hi发现了一部名字叫<十进制进行曲大全>的作品集,顾名思义,这部作品集里有许多作品 ...
- hihocoder 1457 后缀自动机四·重复旋律7 ( 多串连接处理技巧 )
题目链接 分析 : 这道题对于单个串的用 SAM 然后想想怎么维护就行了 但是多个串下.可以先将所有的串用一个不在字符集( 这道题的字符集是 '0' ~ '9' ) 链接起来.建立后缀自动机之后 在统 ...
- hihoCoder #1457 : 后缀自动机四·重复旋律7(后缀自动机 + 拓扑排序)
http://hihocoder.com/problemset/problem/1457 val[i] 表示状态i所表示的所有字符串的十进制之和 ans= ∑ val[i]在后缀自动机上,从起始状态走 ...
- HIHOcoder 1466 后缀自动机六·重复旋律9
思路 后缀数组+博弈论的好题,首先对两个串都建出SAM,然后题目的要求实际上就是在SAM的trans上转移即可 DAG的博弈是经典问题,然后dfs求出SG函数,两个游戏的组合就是把SG函数异或起来,异 ...
- HIHOcoder 1449 后缀自动机三·重复旋律6
思路 显然endpos的大小就对应了对应子串的出现次数,所以快速求出endpos的大小,然后用它更新对应子串长度(minlen[i]~maxlen[i])的答案即可 endpos的大小可以拓扑排序求出 ...
随机推荐
- Spark学习之路 (六)Spark Transformation和Action
Transformation算子 基本的初始化 java static SparkConf conf = null; static JavaSparkContext sc = null; static ...
- android手机平板如何使用usb有线网卡
最近有个项目需要在android平板上使用usb有线网卡,所以做了一部分工作,在这里简单总结一下. 我在TB上购买了一个micro-usb接口的android免驱有线网卡,这个网上很多,随便买一个符合 ...
- tensorflow serving
1.安装tensorflow serving 1.1确保当前环境已经安装并可运行tensorflow 从github上下载源码 git clone --recurse-submodules https ...
- Java 高级开发必修知识---内部类
摘自:http://www.cnblogs.com/lsy131479/p/8798912.html Java 内部类分为: 1)成员内部类 2)静态嵌套类 3)方法内部类 4)匿名内部类 内部类的共 ...
- 像黑客一样使用Linux命令行(转载)
阅读目录 前言 使用 tmux 复用控制台窗口 在命令行中快速移动光标 在命令行中快速删除文本 快速查看和搜索历史命令 快速引用和修饰历史命令 录制屏幕并转换为 gif 动画图片 总结 回到顶部 前言 ...
- hibernate文档头的不同版本
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "h ...
- How to Get Text inside a Canvas using Webdriver or Protractor
https://stackoverflow.com/questions/43609429/how-to-get-text-inside-a-canvas-using-webdriver-or-prot ...
- Sort aborted Error in MySQL Error Log
现象 [ERROR] lines containing "Sort aborted" are present in the MySQL error log file. [Warni ...
- 使ipconfig命令结果更整洁
在windows下,使用ipconfig命令会出来很多内容,很多事ipv6隧道适配器的内容.而现在大部分人都还用不到ipv6,因此我们可以输入以下命令关闭ipv6隧道适配器,使命令结果更整洁. net ...
- kali安装搜狗输入法
安装步骤 依赖1: apt-get install fcitx 依赖2: apt-get install fcitx-libs-qt 重建: apt-get --fix-broken install ...