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 暴力的更多相关文章

  1. Codeforces Round #254 (Div. 1) D - DZY Loves Strings

    D - DZY Loves Strings 思路:感觉这种把询问按大小分成两类解决的问题都很不好想.. https://codeforces.com/blog/entry/12959 题解说得很清楚啦 ...

  2. 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 ...

  3. 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 ...

  4. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 分块

    C. DZY Loves Colors 题目连接: http://codeforces.com/contest/444/problem/C Description DZY loves colors, ...

  5. Codeforces Round #254 (Div. 1) A. DZY Loves Physics 智力题

    A. DZY Loves Physics 题目连接: http://codeforces.com/contest/444/problem/A Description DZY loves Physics ...

  6. Codeforces Round #254 (Div. 2) A. DZY Loves Chessboard —— dfs

    题目链接: http://codeforces.com/problemset/problem/445/A 题解: 这道题是在现场赛的最后一分钟通过的,相当惊险,而且做的过程也很曲折. 先是用递推,结果 ...

  7. 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 ...

  8. 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内 ...

  9. [题解]Codeforces Round #254 (Div. 2) B - DZY Loves Chemistry

    链接:http://codeforces.com/contest/445/problem/B 描述:n种药品,m个反应关系,按照一定顺序放进试管中.如果当前放入的药品与试管中的药品要反应,危险系数变为 ...

随机推荐

  1. go 函数介绍

    1. 定义:有输入.有输出,用来执行一个指定任务的代码块 func functionname([parametername type]) [returntype] { //function body ...

  2. 内核工具 – Sparse 简介【转】

    转自:http://www.cnblogs.com/wang_yb/p/3575039.html Sparse是内核代码静态分析工具, 能够帮助我们找出代码中的隐患. 主要内容: Sparse 介绍 ...

  3. mysql修改表的存储引擎(myisam<=>innodb)【转】

    修改表的存储引擎myisam<=>innodb 查看表的存储引擎mysql> show create table tt7;+-------+--------------------- ...

  4. HDU 4597 Play Game(区间DP(记忆化搜索))

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4597 题目大意: 有两行卡片,每个卡片都有各自的权值. 两个人轮流取卡片,每次只能从任一行的左端或右端 ...

  5. C++静态成员的应用

    当在类外部定义静态成员时,不能重复使用static关键字 静态成员函数不包含this指针(无论是显示还是隐式使用) 静态成员可以通过类对象进行访问,也可以通过类进行访问 静态成员不是由构造函数初始化的 ...

  6. 20155309 2016-2017-2《Java程序设计》课程总结

    预备作业1http://www.cnblogs.com/nhx19970709/p/6155580.html 第一次写博客,也是第一次用Markdown,具体流程都还不是很熟悉 预备作业2http:/ ...

  7. XML&反射

    本节内容: XML DTD约束 Schema约束 dom4j解析 反射 为了实现访问不同路径(/hello)执行不同的资源(HelloMyServlet),我们需要使用XML进行配置:为了限定XML内 ...

  8. 《精通Python设计模式》学习结构型之MVC模式

    这个就不需要多评论了, 哪个主流的PYTHON的WEB框架都有这些模式实现哈. quotes = ('A man is not complete until he is married. Then h ...

  9. 从字节码角度分析Byte类型变量b++和++b

    1. 下面是一到Java笔试题: public class Test2 { public void add(Byte b) { b = b++; } public void test() { Byte ...

  10. 【AtCoder】ARC094(C-F)题解

    C - Same Integers 题解 要么三个都达到最大的数,要么三个都到达最大的数+1,判断是前一种情况的方法是不断垫高前两大的,看之后最小的那个和最大的那个差值是不是2的倍数 否则就是第二种情 ...