SYZOJ 186 [额]你猜是不是DP(哈希+二分答案+二分搜索)
题目描述
现在给两个仅包含小写字母的字符串a,b ,求a 与b的最长公共连续子串的长度。
输入格式
两个字符串
输出格式
一个整数,为输入的两个字符串的最长公共连续子串的长度
测试样例
输入
qaqaaaq
qqaqa
输出
4
解释
最长连续公共子串为qaqa,长度为4
数据范围与提示
20 组测试数据
对于20%的数据,a,b长度 ∈ [1, 200]
对于50%的数据,a,b长度 ∈ [1, 20000]
对于100%的数据, a,b长度 ∈ [1, 200000]
题目链接:SYZOJ 186
哈希第一题,预处理出前缀hash值后二分答案,这里需要用二分优化,把第一个和第二个字符串的所有以mid为长度的区间哈希值储存并对后者排序,那么只要遍历第一个字符串的区间哈希值的时候二分查找第二段是否存在同样的哈希值即可。若二分+双for循环遍历的复杂度$O(logN*N^2)$只有85分会超时,改成二分搜索复杂度就成了$O(logN*NlogN)$就不会超时了,突然发现哈希有时候是个神器,只是写起来有点麻烦而且对于hash killer这种题目就比较尴尬了
代码:
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LC(x) (x<<1)
#define RC(x) ((x<<1)+1)
#define MID(x,y) ((x+y)>>1)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
typedef pair<int, int> pii;
typedef long long LL;
typedef unsigned long long ULL;
const double PI = acos(-1.0);
const int N = 200010;
const ULL seed = 1e9 + 7;
ULL prefix[N], pa[N], pb[N], ha[N], hb[N];
char a[N], b[N];
ULL vec[N]; void init()
{
prefix[0] = 1ull;
for (int i = 1; i < N; ++i)
prefix[i] = prefix[i - 1] * seed;
}
int main(void)
{
int i, j;
init();
while (~scanf("%s%s", a + 1, b + 1))
{
int la = strlen(a + 1);
int lb = strlen(b + 1);
pa[0] = pb[0] = 0;
for (i = 1; i <= la; ++i)
pa[i] = pa[i - 1] * seed + a[i];
for (i = 1; i <= lb; ++i)
pb[i] = pb[i - 1] * seed + b[i];
int ans = 0, L = 0, R = min(la, lb);
while (L <= R)
{
int mid = (L + R) >> 1;
int flag = 0;
int sa = 0, sb = 0;
for (i = mid; i <= la; ++i)
ha[sa++] = pa[i] - pa[i - mid] * prefix[mid];
for (i = mid; i <= lb; ++i)
hb[sb++] = pb[i] - pb[i - mid] * prefix[mid];
sort(hb, hb + sb);
for (i = 0; i < sa; ++i)
{
if (binary_search(hb, hb + sb, ha[i]))
{
flag = 1;
break;
}
}
if (flag)
{
ans = mid;
L = mid + 1;
}
else
R = mid - 1;
}
printf("%d\n", ans);
}
return 0;
}
SYZOJ 186 [额]你猜是不是DP(哈希+二分答案+二分搜索)的更多相关文章
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp ...
- [BJOI2019]奥术神杖——AC自动机+DP+分数规划+二分答案
题目链接: [BJOI2019]奥术神杖 答案是$ans=\sqrt[c]{\prod_{i=1}^{c}v_{i}}=(\prod_{i=1}^{c}v_{i})^{\frac{1}{c}}$. 这 ...
- bzoj 3507 DP+哈希
[Cqoi2014]通配符匹配 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 541 Solved: 235[Submit][Status][Dis ...
- 【CodeForces】961 F. k-substrings 字符串哈希+二分
[题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...
- [CF752E]Santa Claus and Tangerines(二分答案,dp)
题目链接:http://codeforces.com/contest/752/problem/E 题意:给n个橘子,每个橘子a(i)片,要分给k个人,问每个人最多分多少片.每个橘子每次对半分,偶数的话 ...
- 【61测试】【dp】【二分】【前缀和】【树剖】
不要问我为什么昨天考的今天才贴解题报告.. 第一题: 给定3个字符串,求它们的最长公共子序列. 解: 考试时知道肯定是LCS的二维再加一维,用三维,可天堂有路你不走,地狱无门你偏来...灵机一动想出来 ...
- BZOJ 1044: [HAOI2008]木棍分割(二分答案 + dp)
第一问可以二分答案,然后贪心来判断. 第二问dp, dp[i][j] = sigma(dp[k][j - 1]) (1 <= k <i, sum[i] - sum[k] <= ans ...
- HDU 3586 二分答案+树形DP判定
HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...
- BZOJ1758[Wc2010]重建计划——分数规划+长链剖分+线段树+二分答案+树形DP
题目描述 输入 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案,每行三个正整数Ai, ...
随机推荐
- LuceneTest
/** * Created by mhm on 2019/6/24. */@RunWith(SpringJUnit4ClassRunner.class)public class LuceneTest ...
- Abode Dreamweaver cc 安装与激活
原文链接Abode Dreamweaver CC是Adobe宣布放弃Creative Suite系列产品后推出的新版Creative Cloud产品,功能上修复了CS6中出现的选取代码不精准的问题,最 ...
- 03_14_final关键字
03_14_final关键字 1. Final关键字 final的变量的值不能够被改变 final的成员变量 final的局部变量(形参) final的方法不能够被重写 final的类不能够被继承
- 更改zabbix-server的端口
1.前言zabbix-server的默认端口号是10051.如果存在端口号冲突,需要更改端口号. 以下为更改端口号的步骤. 2.更改配置文件 通常用安装包,也就是yum方式部署的话,其默认的配置文件是 ...
- 【linux】CPU,内存对网站的影响
如果读写非常多,建议内存大点 如果涉及到的计算非常多,那就升级CPU
- BootCDN 开源项目免费 CDN 加速服务,Jquery插件库
2017-11-17 19:38:32 免费好用的在线 css js 文件引用 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务 Jquery插件库 .
- Python学习笔记:装饰器
Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...
- 添加SQL字段
通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数增加字段: alter table [表名] add 字段名 smallin ...
- 【luminate primordial】苏州之行
测试了reader 07版 更主要的是第一次坐了高铁 还不错 路上看到下雨的时候都是水顺着玻璃平着流 好厉害的样子 6个人去的6个人回 今儿开会 老板不太满意 小随意 对我来说,收获感觉还是不小的,使 ...
- linux系统下单节点hadoop2的配置
Jdk安装: jdk-7u45-linux-x64.gz cp jdk-7u45-linux-x64.gz /usr/java/ cd /usr/java/ tar -zxvf jdk-7u45-li ...