P3763 [TJOI2017]DNA(SAM+dfs)
LINK
SAM写法
记得以前是用 F F T FFT FFT写的,推狮子翻来覆去…
然而这不是被 S A M SAM SAM秒掉的垃圾题吗??!!
建立 S A M SAM SAM,直接从根节点去 d f s dfs dfs
如果自动机上有边转移就不需要花费,否则花费一次字母不同的机会
如果匹配完了串 S S S,加上当前节点的出现次数即可
LCP写法
直接枚举 s 0 s_0 s0中的开始位置 j j j,判断 [ j , j + ∣ S ∣ − 1 ] [j,j+|S|-1] [j,j+∣S∣−1]是否满足要求
当然不是一位一位匹配,我们直接跳跃相同的部分
怎么跳??这个可以二分+哈希来跳,也可以开始用后缀数组串起来求 h e i g h t height height数组得到
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int zi[maxn][30],fa[maxn],siz[maxn],len[maxn],las = 1,id = 1,ans = 0,n,m;
char a[maxn],s[maxn];
void insert(int c)
{int p = las, np = ++id; las = id;len[np] = len[p]+1; siz[np] = 1;for( ; p&&!zi[p][c];p=fa[p] ) zi[p][c] = np;if( !p ) fa[np] = 1;else{int q = zi[p][c];if( len[q]==len[p]+1 ) fa[np] = q;else{int nq = ++id; len[nq] = len[p]+1;memcpy( zi[nq],zi[q],sizeof zi[nq] );fa[nq] = fa[q], fa[q] = fa[np] = nq;for( ; p&&zi[p][c]==q;p=fa[p] ) zi[p][c] = nq;}}
}
int c[maxn],rk[maxn];
void chiken_sort()
{for(int i=1;i<=id;i++) c[len[i]]++;for(int i=1;i<=id;i++) c[i] += c[i-1];for(int i=1;i<=id;i++) rk[c[len[i]]--] = i;for(int i=id;i>=1;i--)siz[fa[rk[i]]] += siz[rk[i]];
}
void dfs(int u,int l,int ci)
{if( ci>3 ) return;if( u!=1&&l==m+1 ) ans += siz[u];if( l>m ) return;for(int i=0;i<=25;i++){if( !zi[u][i] ) continue;dfs( zi[u][i],l+1,ci+( i!=(s[l]-'A') ) );}
}
int main()
{int t; cin >> t;while( t-- ){cin >> ( a+1 ) >> ( s+1 );n = strlen( a+1 ), m = strlen( s+1 );for(int i=1;i<=n;i++) insert( a[i]-'A' );chiken_sort();dfs(1,1,0);cout << ans << endl;for(int i=1;i<=id;i++)memset( zi[i],0,sizeof zi[i] ),fa[i] = len[i] = siz[i] = c[i] = rk[i] = 0;ans = 0, las = id = 1;}
}
P3763 [TJOI2017]DNA(SAM+dfs)相关推荐
- 洛谷P3763 [Tjoi2017]DNA 【后缀数组】
题目链接 洛谷P3763 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ #include<algorithm> #include<iostream> #include< ...
- P3763 [TJOI2017]DNA (FFT)
原题题面 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列 SSS,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列 SSS,任意修改其中不超过 3 个碱基,依然能够 ...
- BZOJ4892: [Tjoi2017]dna
BZOJ4892: [Tjoi2017]dna Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S, 有这个序列的碱基序列就会表现出喜欢吃藕的性状. 但是研究人员发现 ...
- [TJOI2017]DNA --- 后缀数组
[TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S, 有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个 ...
- BZOJ 4892: [Tjoi2017]DNA(SA+RMQ / SAM)
Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的 性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够 ...
- [TJOI2017]DNA
Description: 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够 ...
- 如何选择优化算法遗传算法_用遗传算法优化垃圾收集策略
如何选择优化算法遗传算法 Genetic Algorithms are a family of optimisation techniques that loosely resemble evolut ...
- 北国の雪(2018-04-25)
わたしは雪が大好きです. 今北京に一人暮らしです. でも.北京は雪が少ないです. 残念ですね. 時間我ある時.友達と東北に雪と氷を見に行きたい. 我很喜欢雪. 现在自己一个人住在北京. 但是北京很少下 ...
- 2018十二月刷题列表
Preface \(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了. 而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报. ...
最新文章
- Nginx其他配置——日志管理、网页压缩、访问控制
- 神经网络通用近似定理
- 深度学习 CNN CUDA 版本2
- 【耿老师公开课】反转!物联网火爆,开发者却很难入门?
- Windows/Linux服务器上Tomcat开启远程调试,使用IDEA本地调试
- 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
- 扫描识别工具Dynamic Web TWAIN使用教程:单独添加/删除对象
- c#水晶报表连接mysql_C# 水晶报表打印 绑定数据库表
- echarts 默认显示图例_Echarts 饼状图显示信息,内容,值,百分比都显示的代码 更改图例等问题汇总...
- 三极管输出和输入特性曲线人类语言(共射为例)
- 2018中科院计算所夏令营面试经历
- 腾达fh307没有显示服务器名,腾达(Tenda)FH307路由器无线WiFi密码和名称设置 | 192路由网...
- 赛灵思 Xilinx Versal 自适应计算加速平台嵌入式设计教程
- 无限级树状图html5,无限树状列表的实现
- DNS提示错误无法上网怎么办?苹果电脑如何修改DNS?
- windows下cmd命令行显示UTF8字符设置(CHCP命令)
- LNMP架构和论坛搭建以及一键部署
- 反无人机时空安全隔离装置
- C 语言破解神奇读心术
- 基于朴素贝叶斯的文本分类算法
热门文章
- 华为云CENTOS下安装MySQL及重置mysql8.0密码
- 科目三考试总结--附送马陆驾校考点路线图
- 脾胃不好如何调理?做好以下几点
- ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This sho
- 利用汇编语言实现串口的通讯(一)(BISO调用)
- html5白鹭引擎,egret
- 京东某员工离职,领导威胁其告知下家,做同样方向会追究责任!
- android.view.surface,Android SurfaceView 源码分析及使用
- LPC简介(超详细)
- Java接口里可以有哪些内容?使用接口时需要注意哪些?