hiho 最短的 Nore0061(思维)

来源:互联网 发布:淘宝删除宝贝怎么恢复 编辑:程序博客网 时间:2024/05/22 02:24

题目1 : 最短的 Nore0061

时间限制:11000ms
单点时限:1000ms
内存限制:256MB

描述

Nore0061 是一个奇怪的 Nore。正如所有的Nore一样,他是名字符串爱好者。Nore0061的名字是字符串 A,姓是字符串 B。有一天 Nore 的国王给 Nore0061 发了一个奇怪由字母数字组成的字符串 S,请 Nore0061 从中找出一个最短的连续子串 S' 使得 S' 能被分解成三个不相交的子序列{ A', B', C'}并且有 A' = AB' = B。<vara< style="box-sizing: border-box;">

输入

第一行包含一个由字母数字组成的字符串 A(1 ≤ |A| ≤ 100)。 第二行包含一个由字母数字组成的字符串 B(1 ≤ |B| ≤ 100)。 第三行包含一个由字母数字组成的字符串 S(1 ≤ |S| ≤ 3000)。

输出

输出最短子串的长度。如果不存在,输出-1。

额外的样例

Sample InputSample OutputNore 
0061
Nsedr0o0n6e1rsod-1 

样例输入
Twyj0mJXRiqNuRj4mRKyTcwFKj0KmCJAFpXRiHGNq
样例输出
22
#include<cstdio>#include<iostream>#include<cstring>#include<string.h> using namespace std;char s[3010];char a[110];char b[110];int l,r;int dis;int len,len1,len2;void work(){int cnt1=0;int cnt2=0;int rr;int k,j;for(int i=0;i<len;i++){if(s[i]==a[0]){j=i;k=0;while(j<len&&k<len1){if(a[k]==s[j]){cnt1++;if(k==len1-1){rr=j;break;}k++;}j++;}j=i;k=0;while(j<len&&k<len2){if(b[k]==s[j]){cnt2++;if(k==len2-1){break;}k++;}j++;}if(cnt1>=len1&&cnt2>=len2){if(rr<j) rr=j;if(dis>rr-i+1) dis=rr-i+1;}}cnt1=0;cnt2=0;if(s[i]==b[0]){j=i;k=0;while(j<len&&k<len1){if(a[k]==s[j]){cnt1++;if(k==len1-1){rr=j;break;}k++;}j++;}j=i;k=0;while(j<len&&k<len2){if(b[k]==s[j]){cnt2++;if(k==len2-1){break;}k++;}j++;}if(cnt1>=len1&&cnt2>=len2){if(rr<j) rr=j;if(dis>rr-i+1) dis=rr-i+1;}}}}int main(){scanf("%s",a);scanf("%s",b);scanf("%s",s);    len=strlen(s);len1=strlen(a);len2=strlen(b);dis=3010;work();if(dis!=3010)printf("%d\n",dis);else printf("-1\n");} 


原创粉丝点击