HDU4622 Reincarnation【SAM】
2024-08-27 10:07:41
HDU4622 Reincarnation
给出一个串,每次询问其一个子串有多少不同的子串
按每个后缀建立\(SAM\)不断往后加字符,然后记录答案,查询的时候直接用即可
//#pragma GCC optimize("O3")
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
const int MAXN = 4444;
int res[MAXN][MAXN];
char s[MAXN];
struct SAM{
int len[MAXN],link[MAXN],ch[MAXN][26],ret,tot,last;
void init(){
memset(ch,0,sizeof(ch));
link[tot = last = 0] = -1;
ret = 0;
}
void extend(int c){
int np = ++tot, p = last;
len[np] = len[last] + 1;
while(p!=-1 and !ch[p][c]){
ch[p][c] = np;
p = link[p];
}
if(p==-1) link[np] = 0;
else{
int q = ch[p][c];
if(len[p]+1==len[q]) link[np] = q;
else{
int clone = ++tot;
len[clone] = len[p] + 1;
link[clone] = link[q];
ret += len[clone] - len[link[clone]];
memcpy(ch[clone],ch[q],sizeof(ch[q]));
ret -= len[q] - len[link[q]];
link[q] = link[np] = clone;
ret += len[q] - len[link[q]];
while(p!=-1 and ch[p][c]==q){
ch[p][c] = clone;
p = link[p];
}
}
}
last = np;
ret += len[np] - len[link[np]];
}
}sam;
void solve(){
cin >> s;
int n = strlen(s);
for(int i = 0; i < n; i++){
sam.init();
for(int j = i; j < n; j++){
sam.extend(s[j]-'a');
res[i][j] = sam.ret;
}
}
int q; cin >> q;
while(q--){
int l, r; cin >> l >> r;
cout << res[l-1][r-1] << endl;
}
}
int main(){
____();
int T;
for(cin >> T; T; T--) solve();
return 0;
}
最新文章
- android studio关联genymotion模拟器,未显示设备
- 查看cpu
- HashMap的面试总结(摘抄)
- [转载] TCP与UDP对比
- 用jstack工具分析java程序
- Hibernate逍遥游记-第6章 通过Hibernate操纵对象(select-before-update)
- Day15 HTML补充、初识JavaScript
- fragment 数据传递,传值,通信
- H5 + 开发App(分享功能)
- 第4章 令牌端点(Token Endpoint) - IdentityModel 中文文档(v1.0.0)
- windows 和linux 路径解析的区别
- 关于Airtest的使用探索
- Kibana简单使用教程
- 替换JDK 对eclipse的影响?
- 如何让linux的history命令显示时间记录
- Nginx调试入门
- CSS3效果:实现气泡效果
- mikrotik ros CVE-2019–3924 DUDE AGENT VULNERABILITY
- harbor仓库镜像的删除
- Borrowed Time
热门文章
- 剑指offer 面试题4:二维数组中的查找
- (数据科学学习手札103)Python+Dash快速web应用开发——页面布局篇
- CPNDet:粗暴地给CenterNet加入two-stage精调,更快更强 | ECCV 2020
- node爬虫 -- 网页图片
- 针对Linux系统主机,进入修复模式,解决开机报错问题
- Spring Validation 验证
- Linux TCP漏洞 CVE-2019-11477 CentOS7 修复方法
- postgres模糊匹配大杀器
- Android事件分发机制五:面试官你坐啊
- Centos 7.x系统下忘记用户登录密码,重置root密码的方法