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)相关推荐

  1. 洛谷P3763 [Tjoi2017]DNA 【后缀数组】

    题目链接 洛谷P3763 题解 后缀数组裸题 在BZOJ被卡常到哭QAQ #include<algorithm> #include<iostream> #include< ...

  2. P3763 [TJOI2017]DNA (FFT)

    原题题面 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列 SSS,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列 SSS,任意修改其中不超过 3 个碱基,依然能够 ...

  3. BZOJ4892: [Tjoi2017]dna

    BZOJ4892: [Tjoi2017]dna Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S, 有这个序列的碱基序列就会表现出喜欢吃藕的性状. 但是研究人员发现 ...

  4. [TJOI2017]DNA --- 后缀数组

    [TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S, 有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个 ...

  5. BZOJ 4892: [Tjoi2017]DNA(SA+RMQ / SAM)

    Description 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的 性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够 ...

  6. [TJOI2017]DNA

    Description: 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个碱基,依然能够 ...

  7. 如何选择优化算法遗传算法_用遗传算法优化垃圾收集策略

    如何选择优化算法遗传算法 Genetic Algorithms are a family of optimisation techniques that loosely resemble evolut ...

  8. 北国の雪(2018-04-25)

    わたしは雪が大好きです. 今北京に一人暮らしです. でも.北京は雪が少ないです. 残念ですね. 時間我ある時.友達と東北に雪と氷を見に行きたい. 我很喜欢雪. 现在自己一个人住在北京. 但是北京很少下 ...

  9. 2018十二月刷题列表

    Preface \(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了. 而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报. ...

最新文章

  1. Nginx其他配置——日志管理、网页压缩、访问控制
  2. 神经网络通用近似定理
  3. 深度学习 CNN CUDA 版本2
  4. 【耿老师公开课】反转!物联网火爆,开发者却很难入门?
  5. Windows/Linux服务器上Tomcat开启远程调试,使用IDEA本地调试
  6. 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
  7. 扫描识别工具Dynamic Web TWAIN使用教程:单独添加/删除对象
  8. c#水晶报表连接mysql_C# 水晶报表打印 绑定数据库表
  9. echarts 默认显示图例_Echarts 饼状图显示信息,内容,值,百分比都显示的代码 更改图例等问题汇总...
  10. 三极管输出和输入特性曲线人类语言(共射为例)
  11. 2018中科院计算所夏令营面试经历
  12. 腾达fh307没有显示服务器名,腾达(Tenda)FH307路由器无线WiFi密码和名称设置 | 192路由网...
  13. 赛灵思 Xilinx Versal 自适应计算加速平台嵌入式设计教程
  14. 无限级树状图html5,无限树状列表的实现
  15. DNS提示错误无法上网怎么办?苹果电脑如何修改DNS?
  16. windows下cmd命令行显示UTF8字符设置(CHCP命令)
  17. LNMP架构和论坛搭建以及一键部署
  18. 反无人机时空安全隔离装置
  19. C 语言破解神奇读心术
  20. 基于朴素贝叶斯的文本分类算法

热门文章

  1. 华为云CENTOS下安装MySQL及重置mysql8.0密码
  2. 科目三考试总结--附送马陆驾校考点路线图
  3. 脾胃不好如何调理?做好以下几点
  4. ImportError: TensorBoard logging requires TensorBoard with Python summary writer installed. This sho
  5. 利用汇编语言实现串口的通讯(一)(BISO调用)
  6. html5白鹭引擎,egret
  7. 京东某员工离职,领导威胁其告知下家,做同样方向会追究责任!
  8. android.view.surface,Android SurfaceView 源码分析及使用
  9. LPC简介(超详细)
  10. Java接口里可以有哪些内容?使用接口时需要注意哪些?