BZOJ_4892_[Tjoi2017]dna_哈希
BZOJ_4892_[Tjoi2017]dna_哈希
Description
Input
Output
Sample Input
ATCGCCCTA
CTTCA
Sample Output
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 100050
#define LL unsigned long long
int T, l1, l2;
char s1[N], s2[N];
LL mi[N], p = 19260817, h1[N], h2[N];
bool check(int x) {
int i = x, j = 1;
int l = 1, r = l2 + 1, mid;
for(int k = 1;k <= 3; ++ k) {
while(l < r) {
mid = (l + r) >> 1;
if(h1[i + mid - 1] - h1[i - 1] * mi[mid] == h2[j + mid - 1] - h2[j - 1] * mi[mid]) l = mid + 1;
else r = mid;
}
i = i + l; j = j + l;
l = 1, r = l2 - j + 2;
if(j > l2) return 1;
mid = l2 - j + 1;
if(h1[i + mid - 1] - h1[i - 1] * mi[mid] == h2[j + mid - 1] - h2[j - 1] * mi[mid]) return 1;
}
return 0;
}
int main() {
scanf("%d", &T);
while(T -- ) {
int i, ans = 0;
scanf("%s%s", s1 + 1, s2 + 1);
l1 = strlen(s1 + 1);
l2 = strlen(s2 + 1);
if(l1 < l2) {
puts("0"); continue;
}
mi[0] = 1;
for(i = 1;i <= l1; ++ i) {
mi[i] = mi[i - 1] * p;
h1[i] = h1[i - 1] * p + s1[i];
}
for(i = 1;i <= l2; ++ i) h2[i] = h2[i - 1] * p + s2[i];
for(i = 1;i <= l1 - l2 + 1; ++ i) {
if(check(i)) ans++;
}
printf("%d\n", ans);
}
}
BZOJ_4892_[Tjoi2017]dna_哈希的更多相关文章
- BZOJ 4892 [Tjoi2017]dna 哈希+二分
自己简直是傻死了...对于位置想错了... 二分出来的是LCP长度$+1$,即每一次二分出来的最后一个点都是失配的,而就算失配也会跳过这个点:所以当$k<=3$且模式串$s2$的指针$>l ...
- [TJOI2017]DNA --- 后缀数组
[TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S, 有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其中不超过3个 ...
- [洛谷P3763] [TJOI2017]DNA
洛谷题目链接:[TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其 ...
- 学习笔记-Rabin-Karp哈希
在数学一本通上看过这两人名字,现在又出现了... 思想: 用一个整数表示一个字符串 \(w_{str}\)=(\(a_0\) \(p^{n-1}\)+\(a_1\) \(p^{n-2}\)+...+\ ...
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java 哈希表运用-LeetCode 1 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...
- Oracle 哈希连接原理
<基于Oracle的sql优化>里关于哈希连接的原理介绍如下: 哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法. 在Oracle 7.3 ...
随机推荐
- 如何成为一个优秀的DBA
今天在群上跟技术友们聊天.发现有几个大学生,他们很担心自己找不到工作.我问他们理由,他们说我们没有经验,公司不要怎么办?这些孩子们的担心,让我感觉到奇怪. 如果我是一个公司的老总,我会有这两种考虑:要 ...
- JAVA程序员面试宝典
程序员面试之葵花宝典 面向对象的特征有哪些方面 1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...
- ThreadPoolExecutor的运转机制
最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看注释和内部运转机制,想当然的揣测参数导致,先看一下新建一个ThreadPoolExecutor的构建参数: ...
- 初识JAVA——方法声明和调用
class TempConverter{ public static void main(String[]args) { changeTemp("132"); } //定义花摄 ...
- Day20 Ajax
Ajax准备知识:json 什么是json? 定义: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w ...
- 推荐 git community book 中文版
官方地址:http://Git.seyren.com/index.html 或者 http://gitbook.liuhui998.com/ book@github项目地址: https://gith ...
- Manacher算法解析
Manacher算法 Manachar算法主要是处理字符串中关于回文串的问题的,它可以在 O(n) 的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍长度的新串,在每两个字符 ...
- ssh运行环境搭建及测试
一.运行环境 1.Spring环境 Spring是一站式开发框架,在SSH中主要有以下作用,就像一个大管家: 控制反转(Inversion of Control):类不再自己进行类创建,而是交给Spr ...
- java集合的contains(obj)方法的实现
在实际项目中我们通常会有一个需求就是:想知道在一个列表中是否包含某一个对象 这里ArrayList表.HashSet表和HashMap表都提供了一个contains(obj)方法, 下面说一下两个列表 ...
- ambari安装集群下安装kafka manager
简介: 不想通过kafka shell来管理kafka已创建的topic信息,想通过管理页面来统一管理和查看kafka集群.所以选择了大部分人使用的kafka manager,我一共有一台主机mast ...