zzulioj1818: squee_spoon and his Cube VI

1818: squee_spoon and his Cube VI

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 41   Solved: 13

Submit Status Web Board

Description

市面上最常见的魔方,是三阶魔方,英文名为Rubik's Cube,以魔方的发明者鲁比克教授的名字命名。另外,二阶魔方叫Pocket Cube,它只有2*2*2个角块,通常也就比较小;四阶魔方叫Revenge Cube,这是因为就算你好不容易复原了三阶魔方,四阶魔方也会向你“复仇”;而五阶魔方叫Professor Cube,人们认为只有专家才能够复原这么复杂的魔方。

作为ACM(A Cube Master),squee_spoon准备为九阶正十二面体魔方命名,此时他的脑中浮现出一个长长的字符串S,似乎可以作为魔方的英文名。但是问题没有那么简单,squee_spoon有n个不喜欢的短字符串a1~an,所以squee_spoon希望将九阶正十二面体魔方命名为S的最长子串T,在这个子串中,不能包含a1~an,即a1~an均不是T的子串。

Input

多组数据。

第一行,字符串S,长度不会超过10^5。

第二行,一个整数n,1<=n<=10。

接下来的n行,n个字符串a1~an,ai的长度不会超过10。

Output

对于每组数据,输出两个整数,分别是T的长度及其在原串S中的起始下标(下标从0开始,如果存在多解,输出最小的起始下标)。

Sample Input

orz_zzuspy
2
orz
us
YM_2030xxj
3
_20
03
M_

Sample Output

6 1
5 5

HINT

Source

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
char str[100010];
char s[15][15];
int main()
{
	int n,i,j,k;
	while(scanf("%s",str)!=EOF){
		scanf("%d",&n);
		int len=strlen(str);
		for(i=0;i<n;++i){
			scanf("%s",s[i]);
		}
		int num=0,cnt;
		int lans=-1,qans=0;
		for(i=0;i<len;++i){
			for(j=0;j<n;++j){
				if(str[i]==s[j][0]){
					int l=strlen(s[j]);
					for(k=0;k<l;++k){
						if(str[i+k]!=s[j][k])break;
					}
					if(k>=l){
						cnt=i+l-num-1;
						if(cnt>lans){
							lans=cnt;
							qans=num;
						}
						num=i+1;
					}
				}
			}
		}
		cnt=len-num;
		if(cnt>lans){
			lans=cnt;
			qans=num;
		}
		printf("%d %d\n",lans,qans);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值