记录编号 98882 评测结果 AAAAAAAAAAAAAA
题目名称 子序列 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.667 s
提交时间 2014-04-25 13:37:38 内存使用 61.74 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("subsequence.in");
ofstream fout("subsequence.out");
const int SIZELA=100010,SIZEM=10001,SIZELB=51;
string A;
int L;
int M;
int next[SIZELA][26]={0};
class NODE{
public:
	int pos;//匹配位置
	int son[26];
	void clear(void){
		pos=0;
		memset(son,-1,sizeof(son));
	}
	NODE(){clear();}
};
NODE trie[SIZEM*50+10];
int tot=0;
bool test(string &s){
	int rt=0;
	for(int i=0;i<s.size();i++){
		NODE &now=trie[rt];
		if(next[now.pos][s[i]-'a']==-1) return false;
		if(now.son[s[i]-'a']==-1){
			tot++;
			trie[tot].pos=next[now.pos][s[i]-'a'];
			now.son[s[i]-'a']=tot;
		}
		rt=now.son[s[i]-'a'];
	}
	return true;
}
void work(void){
	string B;
	for(int i=1;i<=M;i++){
		fin>>B;
		if(test(B)) fout<<"Yes"<<endl;
		else fout<<"No"<<endl;
	}
}
void init(void){
	memset(next,-1,sizeof(next));
	int now[26]={0};
	memset(now,-1,sizeof(now));
	for(int i=L;i>=1;i--){
		memcpy(next[i],now,sizeof(now));
		now[A[i]-'a']=i;
	}
	memcpy(next[0],now,sizeof(now));
}
int main(){
	//freopen("subsequence.in","r",stdin);
	//freopen("subsequence.out","w",stdout);
	fin>>A>>M;
	//cout<<A<<endl;
	L=A.size();
	//for(int i=0;i<=10;i++) cout<<A[i];cout<<endl;
	A="0"+A;
	//cout<<A<<" "<<L<<endl;
	//cout<<A[2]<<endl;
	init();
	work();
	fin.close();
	fout.close();
	return 0;
}