记录编号 596078 评测结果 AAAAAAAAAAAAAA
题目名称 子序列 最终得分 100
用户昵称 Gravatarwdsjl 是否通过 通过
代码语言 C++ 运行时间 0.071 s
提交时间 2024-10-21 15:24:37 内存使用 5.09 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5+10;
char s[N],b[60];

int n,m,lenb,to[N][30],la[30];

int main(){
	freopen("subsequence.in","r",stdin);
	freopen("subsequence.out","w",stdout);
	scanf("%s",s+1);
	scanf("%d",&m);
	n=strlen(s+1);
	for(int i=0;i<26;i++)la[i]=n+1;
	for(int i=n;i>=1;i--){
		la[s[i]-'a']=i;
		for(int j=0;j<26;j++){
			to[i][j]=la[j];
		}
	}
	for(int j=0;j<26;j++){
		to[0][j]=la[j];
	}
	while(m--){
		scanf("%s",b+1);
//		cout<<b+1<<endl;
		lenb=strlen(b+1);
		int x=0;
		for(int i=1;i<=lenb;i++){
			x=to[x][b[i]-'a'];
//			cout<<"R"<<x;
			if(x==n+1){
				printf("No\n");
				break;
			} 
		}
		if(x<=n){
			printf("Yes\n");
		}
	}
	return 0;
}