比赛 “Asm.Def战记之太平洋”杯 评测结果 C
题目名称 Asm.Def谈笑风生 最终得分 0
用户昵称 KZNS 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2015-11-02 11:44:06
显示代码纯文本
// KZ's
#include <fstream>
#include <string>
using namespace std;
ifstream fin ("asm_talk.in");
ofstream fout ("asm_talk.out");
///////
typedef int words[26];
class poi {
public:
	bool yn;
	words nt;
	void zero() {
		yn=false;
		memset(nt,0,sizeof(nt));
	}
}tr[1800000];
///////
int pt=1;
int uc;
///////
void ad(int i,string &s,int j) {
	if (j==s.length()) {
		tr[i].yn=true;
		return;
	}
	else {
		uc=s[j]-'a';
		int &u=tr[i].nt[uc];
		if (u)
			ad(u,s,j+1);
		else {
			u=pt;
			tr[u].zero();
			pt++;
			ad(u,s,j+1);
		}
	}
}
bool ck(int i,string &s,int j) {
	if (j==s.length())
		return tr[i].yn;
	if (s[j]!='*') {
		if (tr[i].nt[s[j]-'a'])
			return ck(tr[i].nt[int(s[j]-'a')],s,j+1);
		else
			return 0;
	}
	else {
		bool fff=0;
		words &uu=tr[i].nt;
		for (int k=0;k<26;k++) {
			if (uu[k]) {
				if(ck(uu[k],s,j+1)) {
					fff=1;
					break;
				}
			}
		}
		return fff;
	}
}
void work() {
	int n,u;
	tr[0].zero();
	string s;
	fin>>n;
	for (int i=0;i<n;i++) {
		fin>>u>>s;
		if (u==1)
			ad(0,s,0);
		else
			if (ck(0,s,0))
				fout<<"YES"<<endl;
			else
				fout<<"NO"<<endl;
	}
}
int main() {
	work();
	return 0;
}
// UBWH