求助站外题
  • 板块学术版
  • 楼主__uint256_t
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/3/12 17:15
  • 上次更新2023/10/28 06:45:34
查看原帖
求助站外题
377164
__uint256_t楼主2022/3/12 17:15

字符串拼接

描述

给定字符串 ss,每次询问给出字符串 pip_i,在 ss 中是否存在两个不相交的区间,使得这两个区间对应的子串拼接起来与 pip_i 相同。

输入描述

第一行输入由大写字母组成的字符串 s  (2s105)s\;(2 \le|s|\le10^5)
第二行输入询问次数 m  (1m100)m\;(1\le m \le100)
以下 mm 行分别给出询问字符串 pip_i,长度不超过 10001000,并且保证所有询问都不相同。

输出描述

输出一个整数,表示满足条件的询问次数。

样例输入

ABCBABA
2
BAAB
ABBA

样例输出

1

以上是题目。
求:

  • 1 解释下样例
  • 2 为什么下面的代码WA了
#include<bits/stdc++.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<unordered_map>
#include<set>
#include<list>
#define ll long long
#define ull unsigned long long
#define inf 0x3f3f3f3f3f
#define INF 0x7f7f7f7f7f
using namespace std;
namespace Iwara{
	template<class T> T MAX(T x,T y){
		return x>y?x:y;
	}
	template<class T,class ... Arg> T MAX(T x,T y,Arg ... arg){
		return MAX(x>y?x:y,arg...);
	}
	template<class T> T MIN(T x,T y){
		return x<y?x:y;
	}
	template<class T,class ... Arg> T MIN(T x,T y,Arg ... arg){
		return MIN(x<y?x:y,arg...);
	}
	template<class T> T lowbit(T x){
		return x&-x;
	}
	template<class T> void SWAP(T &x,T &y){
		T qwq;
		qwq=x;
		x=y;
		y=qwq;
		return;
	}
}
using namespace Iwara;
const ll MAXN=1e5+5;
char ch[MAXN];
ll n,m,ans,l;
char q[MAXN];
ll maxl[MAXN],maxr[MAXN];
int main(){
	cin>>(ch+1);
	n=strlen(ch+1);
	cin>>m;
	for(int i=1;i<=m;i++){
		cin>>(q+1);
		l=strlen(q+1);
		ll lpos=0,rpos=l+1;
		for(int j=0;j<=n+1;j++)maxl[j]=0,maxr[j]=l+1;
		for(ll L=1,R=n;L<=n;L++,R--){
			if(q[lpos+1]==ch[L])lpos++;
			else lpos=0;
			if(q[rpos-1]==ch[R])rpos--;
			else rpos=l+1;
			maxl[L]=MAX(maxl[L-1],lpos);
			maxr[R]=MIN(maxr[R+1],rpos);
		}
		for(int j=1;j<=n;j++){
			if(maxl[j]+1>=maxr[j+1]||maxr[j]-1<=maxl[j-1]){
				ans++;
				break;
			}
		}
	}
	cout<<ans;
	return 0;
}

2022/3/12 17:15
加载中...