#bzoj3304. 带限制的最长公共子序列

带限制的最长公共子序列

题目描述

原件:tmp1.png

对于某两个字符串AABB,设AA的长度为 ppBB 的长度为 qq,若用以下形式表示他们。

a=a1a2a3a4apa=a_1 a_2 a_3 a_4 \ldots a_p b=b1b2b3b4apb=b_1 b_2 b_3 b_4 \ldots a_p

我们说AA包含 BB,或者说 BBAA子序列,当且仅当存在

1i1<i2<i3<<ipp1\le i_1<i_2<i_3<\ldots<i_p\le p

满足

aik=bk for ikqa_{i_k}=b_k \text{ for } i\le k\le q

你的任务是:给定三个字符串XXYYZZ,求 XXYY 的一个公共子序列WW,使得WW包含 ZZ

要求找出最长的这种序列WW的长度。

输入格式

输入共三行,每行为长度不超过500500的,小写字母组成的非空字符串

按顺序分别表示x,y,zx,y,z

输出格式

如存在满足条件的NN,输出WW的长度,否则输出 NO SOLUTION

样例

helloworld
hellxebore
xr
5

样例解释

W=hxeorW=\text{hxeor}

数据范围与约定

LL为字符串长度,

则对于100%100\%的数据:L500L\le 500.

提示

本题要求找出的WW首先是XXYY的公共子序列并且包含ZZ,然后才是满足这些条件的字符串里面找最长的。