Codeforces Round #254 (Div. 1) D. DZY Loves Strings hash 暴力
D. DZY Loves Strings
题目连接:
http://codeforces.com/contest/444/problem/D
Description
DZY loves strings, and he enjoys collecting them.
In China, many people like to use strings containing their names' initials, for example: xyz, jcvb, dzy, dyh.
Once DZY found a lucky string s. A lot of pairs of good friends came to DZY when they heard about the news. The first member of the i-th pair has name ai, the second one has name bi. Each pair wondered if there is a substring of the lucky string containing both of their names. If so, they want to find the one with minimum length, which can give them good luck and make their friendship last forever.
Please help DZY for each pair find the minimum length of the substring of s that contains both ai and bi, or point out that such substring doesn't exist.
A substring of s is a string slsl + 1... sr for some integers l, r (1 ≤ l ≤ r ≤ |s|). The length of such the substring is (r - l + 1).
A string p contains some another string q if there is a substring of p equal to q.
Input
The first line contains a string s (1 ≤ |s| ≤ 50000).
The second line contains a non-negative integer q (0 ≤ q ≤ 100000) — the number of pairs. Each of the next q lines describes a pair, the line contains two space-separated strings ai and bi (1 ≤ |ai|, |bi| ≤ 4).
It is guaranteed that all the strings only consist of lowercase English letters.
Output
For each pair, print a line containing a single integer — the minimum length of the required substring. If there is no such substring, output -1.
Sample Input
xudyhduxyz
3
xyz xyz
dyh xyz
dzy xyz
Sample Output
3
8
-1
题意
给你一个串,然后有q次询问,每次询问给你两个串s1,s2
你需要找到一个最短的串s,使得这个串包含这两个子串
题解:
因为询问的那个串的长度才4嘛
我就预处理所有串的出现的位置,然后每次O(n+m)去找最小的长度就好了
再加一个人尽皆知的剪枝:如果这个询问问过了,那就直接输出答案
然后就莽过去了……
代码
#include <bits/stdc++.h>
using namespace std;
const int N=5e4+10;
const int NN=6e5+10;
char s[N];
vector<int> v[NN];
map<pair<int,int>,int> mp;
int main()
{
scanf("%s",s);
int n=strlen(s);
for(int l=1;l<=4;l++)
{
for(int i=0;i+l-1<n;i++)
{
int tmp=0;
for(int j=l-1;j>=0;j--)
tmp=(tmp*27)+s[i+j]-'a'+1;
v[tmp].push_back(i);
}
}
int q;
scanf("%d",&q);
while(q--)
{
char s1[6],s2[6],ss[2];
scanf("%s%s",s1,s2);
int t1=0,t2=0,l1=strlen(s1),l2=strlen(s2);
for(int j=l1-1;j>=0;j--)
t1=(t1*27)+s1[j]-'a'+1;
for(int j=l2-1;j>=0;j--)
t2=(t2*27)+s2[j]-'a'+1;
if(mp[make_pair(t1,t2)]!=0)
{
printf("%d\n",mp[make_pair(t1,t2)]);
continue;
}
int ans=n+2;
for(int j=0,i=0;i<v[t1].size();i++)
{
for(;j<v[t2].size()&&v[t2][j]<v[t1][i];j++);
if(j>=v[t2].size()) break;
ans=min(ans,max(v[t2][j]+l2,v[t1][i]+l1)-min(v[t1][i],v[t2][j]));
}
for(int j=v[t2].size()-1,i=v[t1].size()-1;i>=0;i--)
{
for(;j>=0&&v[t2][j]>v[t1][i];j--);
if(j<0) break;
ans=min(ans,max(v[t2][j]+l2,v[t1][i]+l1)-min(v[t1][i],v[t2][j]));
}
if(ans==n+2) ans=-1;
mp[make_pair(t1,t2)]=ans;
printf("%d\n",ans);
}
return 0;
}
Codeforces Round #254 (Div. 1) D. DZY Loves Strings hash 暴力的更多相关文章
- Codeforces Round #254 (Div. 1) D - DZY Loves Strings
D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...
- Codeforces Round #FF (Div. 2):B. DZY Loves Strings
B. DZY Loves Strings time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 线段树
题目链接: http://codeforces.com/problemset/problem/444/C J. DZY Loves Colors time limit per test:2 secon ...
- Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块
C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...
- Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题
A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...
- Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs
题目链接: http://codeforces.com/problemset/problem/445/A 题解: 这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折. 先是用递推,结果 ...
- Codeforces Round #254 (Div. 2)B. DZY Loves Chemistry
B. DZY Loves Chemistry time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Codeforces Round #254 (Div. 1) C DZY Loves Colors
http://codeforces.com/contest/444/problem/C 题意:给出一个数组,初始时每个值从1--n分别是1--n. 然后两种操作. 1:操作 a.b内的数字是a,b内 ...
- [题解]Codeforces Round #254 (Div. 2) B - DZY Loves Chemistry
链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为 ...
随机推荐
- HaoZipC不是内部或外部命令
Win7专业版,32位,HaoZip V3.2 将安装命令下HaoZipC.exe,HaoZip.dll,lang\HaoZipLang_chs.dll三个文件拷贝到C:\Windows\System ...
- java系统的优化
1.tomcat.jboss.jetty的jvm内存,增大 2.数据库的优化,如MySQL的innodb_buffer_pool_size等参数,增大
- PlantUML——4.实例演示1
给自己发消息 @startuml Alice -> Alice : This is a signal to self.\nIt also demonstrates \nmultiline tex ...
- No.1 selenium学习之路之浏览器操作
selenium基础,首先就是浏览器的相关操作 下面描述几种浏览器的常用操作 1.打开浏览器 webdriver后面添加想要打开的浏览器 Ie或者Chrome 2.打开指定页面(百度) 3.休眠时间 ...
- P2733 家的范围 Home on the Range
又是一校内模拟赛见的题 不知道为什么出题人怎么这么喜欢USACO的Farmer John的他的牛... 感觉这道题不是特别的难,但也不很水 同机房的神仙们都说这个题是一道二维前缀和的裸题,但我当时的确 ...
- 修饰符(动态String数组篇)--- 常用 解除疑问。
1.无修饰符----是直接传基本类型的地址过来,并没有把基本类型的指针复制一份入栈,所以一旦修改就是修改原来的值. 2.const 修饰符 与 无修饰符一致. 3.var修饰符 与 上一致. 4.ou ...
- C#socket编程序(三)
private void ReceiveData() { bool keepalive = true; Socket s = clientSocket; Byte[] buffer = new Byt ...
- JDBC连接池和DBUtils
本节内容: JDBC连接池 DBUtils 一.JDBC连接池 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采取连接池技术,来共享连接Conne ...
- css实现360导航首页超链接变色
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- day7异常处理
异常处理 下面看一个简单例子: data = {} try: data["name"] except KeyError as e: #e是错误的相信信息,错误的原因 print(& ...