比赛 |
“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