博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu6138 hash+二分
阅读量:5168 次
发布时间:2019-06-13

本文共 1638 字,大约阅读时间需要 5 分钟。

题意: n个串,每次查询两个,问最长的公共自串并且这个子串要是n个串其中一个的前缀。

思路:正解是AC自动机。。。这里瞎搞了一下居然过了,直接二分答案,然后判断(类似hash求公共子串一样),就再加一个是不是前缀的判断就好。。

时间复杂度理论上最差n*m*logn。。。但是神奇的只跑了150ms。。。

代码:

#include
using namespace std;#define MEM(a,b) memset(a,b,sizeof(a))#define bug puts("bug");#define PB push_back#define MP make_pair#define X first#define Y secondtypedef unsigned long long ll;typedef pair
pii;const int maxn=1e5+10;const int mod=1e9+7;using namespace std;int t,m,n,k;string s[maxn];const unsigned long long SEED = 13331;unsigned long long P[maxn],S[maxn];unsigned long long HS(int l,int r,int x){ if(l==r) return s[x][l-1]; return S[r] - S[l-1]*P[r-l+1];}unordered_set
st,tmp;bool ok(int len,int x,int y){ tmp.clear(); for(int i=1;i<=s[x].size();i++) S[i] = S[i-1]*SEED + s[x][i-1]; for(int i=1;i+len-1<=s[x].size();i++) tmp.insert(HS(i,i+len-1,x)); for(int i=1;i<=s[y].size();i++) S[i] = S[i-1]*SEED + s[y][i-1]; for(int i=1;i+len-1<=s[y].size();i++) if(tmp.count(HS(i,i+len-1,y))&&st.count(HS(i,i+len-1,y))) return true; return false;}int main(){ P[0] = 1;S[0]=0; for(int i = 1; i < maxn; i++)P[i] = P[i-1] * SEED; ios::sync_with_stdio(false); cin>>t; while(t--){ st.clear(); cin>>n; for(int i=0;i
>s[i]; for(int i=0;i
>m; int x,y; for(int i=0;i
>x>>y; --x;--y; int l=0,r=min(s[x].size(),s[y].size()); while(l<=r){ int mid=(l+r)/2; if(ok(mid,x,y)) l=mid+1; else r=mid-1; } cout<
<

转载于:https://www.cnblogs.com/zhangxianlong/p/10672497.html

你可能感兴趣的文章
全球外贸客户资源网站总汇
查看>>
杂项-CORS:CORS(跨域资源共享)
查看>>
杨柳目-杨柳科:杨柳科
查看>>
Node.js:JXcore
查看>>
OO第三次总结
查看>>
Eclipse UML插件
查看>>
易语言数据库的基本操作
查看>>
打包iOS应用程序
查看>>
EasyUI - DataGrid 去右边空白滚动条列
查看>>
安卓数据库操作
查看>>
MySql中的变量定义
查看>>
spoj2798 QTREE3 Query on a tree again!
查看>>
Python acos() 函数
查看>>
top coder password题解
查看>>
iis php 显示错误信息,IIS7.5 显示详细错误信息的方法
查看>>
php manual 下载,PHP - Manual手册 - Download下载
查看>>
php array merge函数,PHP合并数组函数array_merge用法分析
查看>>
php程序整合uc,UCenter应用程序开发简单实例(双向同步),php与UCenter对接
查看>>
php 文件上传mime 类型,php 上传的MIME类型
查看>>
matlab版本 dd_tools,dd_tools安装要求以及svdd
查看>>