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, ...
随机推荐
- kubernetes-存储卷(十二)
为了保证数据的持久性,必须保证数据在外部存储在docker容器中,为了实现数据的持久性存储,在宿主机和容器内做映射,可以保证在容器的生命周期结束,数据依旧可以实现持久性存储.但是在k8s中,由于pod ...
- kubernetes-服务发现service(九)
service •防止Pod失联 •定义一组Pod的访问策略 •支持ClusterIP,NodePort以及LoadBalancer三种类型 •Service的底层实现主要有ipta ...
- java设计模式——抽象工程模式
一. 定义与类型 定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类 类型:创建型 二. 适用场景 客户端不依赖于产品类实例如何备创建,实现等细节 创建一系列相关的产品 ...
- js字符串的使用
Javascript的内置功能之一就是字符串连接,如果+号用于两个字符串连接 var s="hello,world" //想要查找给定位置的字符 s.cha ...
- Apache RocketMQ 正式开源分布式事务消息
近日,Apache RocketMQ 社区正式发布4.3版本.此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社区最为关心的分布式事务消息, ...
- React Native 初探
推荐文章 React Native 简介:用 JavaScript 搭建 iOS 应用 (1) React Native 简介:用 JavaScript 搭建 iOS 应用 (2) React Nat ...
- Mysql 查询出某列字段 被包含于 条件数据中
我们通常是使用 某条件 是否包含于 某列中 ,简单点 就是:select * from 表名 where 字段名 like '%条件数据%'; 现在说下 某列 被包含于 条件数据中 接下 ...
- Java读取各种文件格式内容
所需的jar包哦也不要太记得了,大家可以搜搜,直接上代码: import java.io.BufferedInputStream; import java.io.File; import java.i ...
- Yii 2.x html 代码压缩
<?php namespace Pangu\web; use yii\base\Component; /** * html格式响应内容格式化 * @author zhouzhian * */ c ...
- POJ 2299 Ultra-QuickSort 简单题解
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 68874 Accepted: 25813 ...