比赛 |
“Asm.Def战记之太平洋”杯 |
评测结果 |
WWWWWWWTTT |
题目名称 |
Asm.Def谈笑风生 |
最终得分 |
0 |
用户昵称 |
woca |
运行时间 |
6.024 s |
代码语言 |
C++ |
内存使用 |
2.25 MiB |
提交时间 |
2015-11-02 10:39:01 |
显示代码纯文本
#include <cmath>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
struct str{
int len;
char c[30];
void init(){memset(c,0,sizeof(c));}
};
bool operator < (str a,str b){
if(a.len == b.len){
for(int i=0;i<a.len;i++){
if(a.c[i]!=b.c[i]){
a.c[i] < b.c[i];
}
}
}
else
a.len < b.len;
}
bool operator == (str a,str b){
if(a.len!=b.len) return false;
for(int i=0;i<a.len;i++)
if(a.c[i]!=b.c[i])
return false;
return true;
}
int cnt=0;
str signal[100010];
int found(str s,int l,int r){
if(l==r){
if(s==signal[l]) return 1;
else return 0;
}
int m=(l+r)/2;
if(s==signal[m]) return m;
else if(signal[m]<s) return found(s,m+1,r);
else return found(s,l,m);
}
int main(){
freopen("asm_talk.in","r",stdin);
freopen("asm_talk.out","w",stdout);
int m,t;
str temp;
scanf("%d",&m);
while(m--){
temp.init();
scanf("%d",&t);
scanf("%s",&temp.c);
temp.len=strlen(temp.c);
if(t==1)
signal[cnt++]=temp;
else{
sort(signal,signal+cnt);
bool ok=false;int x;
for(int i=0;i<temp.len;i++){
if(temp.c[i]=='*'){
ok=true;x=i;break;
}
}
if(!ok){
int ans=found(temp,0,cnt-1);
if(ans) printf("Yes\n");
else printf("No\n");
}
else{
int ans=0;
for(int i=0;i<26;i++){
temp.c[x]=char('a'+i);
ans=max(ans,found(temp,0,cnt-1));
}
if(ans) printf("Yes\n");
else printf("No\n");
}
}
}
return 0;
}