Asm.Def談笑風生

★   輸入文件:asm_talk.in   輸出文件:asm_talk.out   簡單對比
時間限制:2 s   內存限制:256 MB
php

【題目描述】

 

「人吶都不知道,本身不能夠預料,直升機剛一出聖地亞哥就把我丟到大家船上,說中央已經決定了,讓我來幫忙監聽無線電信號……」人工智能

美國海軍「無蛤」號電子測量船的船長,斯科特·華萊士繼續把玩着手中的鴨嘴筆,「我們就在你要監聽的那我的工智能艦隊眼皮底下,你怎麼知道這麼做死沒問題?」spa

「管它呢,我告訴你一點人生的經驗,有事就坐那個撤,」Asm.Def瞟了一眼窗外爲「無蛤」號護航的151「雪風」號驅逐艦,「它跑得比誰都快。」code

華萊士的心裏此時是崩潰的。「來人,把Asm.Def塞進意大利炮,打出去。我從未見過有如此厚顏……」blog

「住手!」Asm.Def大喊。內存

「咱們在聖地亞哥找到的數據代表,人工智能發出的無線電信號遵循必定模式,據此能夠預測它們的行動。」字符串

Asm.Def檢測到了一系列無線電信號,每一個信號都是由小寫字母組成,長度<=20的字符串。他有時會查詢,某個字符串T是否已被檢測到。T中可能會包含一個通配符「*」,表明這一位能夠是任意字母。get

 

【輸入格式】

 

第一行一個整數m,表示操做數量。string

接下來m行每行一個操做,爲以下兩種之一:io

1 S:表示Asm.Def新檢測到了一個信號S。

2 T:表示查詢信號T是否已被檢測到。有則輸出「YES」,不然輸出「NO」。T中至多包含一個通配符「*」。

 

【輸出格式】

 

 

對每一個2操做,輸出一行「YES」或「NO」。

 

【樣例輸入】

6
1 ab
2 ab*
1 abc
1 adc
2 *d
2 abc

【樣例輸出】

NO
NO
YES

【提示】

 

數據範圍:

70%的數據,m<=1000.

100%的數據,m<=10^5.

S、T都是長度不超過20的小寫字母串,但T中可能包含通配符。

 思路:STL——map||字典樹

代碼實現:

 1 #include<map>
 2 #include<string>
 3 #include<cstdio>
 4 using namespace std;
 5 int m,a,b,p,l;
 6 map <string,bool>v;
 7 char ch[30];
 8 int main(){
 9     freopen("asm_talk.in","r",stdin);
10     freopen("asm_talk.out","w",stdout);
11     scanf("%d",&m);
12     while(m--){
13         scanf("%d%s",&a,ch);
14         if(a==1) v[ch]=true;
15         if(a==2){
16             b=30;
17             for(int i=0;ch[i]!='\0';i++) if(ch[i]=='*') b=i;
18             if(b<20){
19                 for(int i=0;i<26;i++){
20                     ch[b]=i+'a';
21                     if(v[ch]){
22                         puts("YES");
23                         p=1;
24                         break;
25                     }
26                 }
27             }
28             else if(v[ch]) puts("YES"),p=1;
29             if(p) p=0;
30             else puts("NO");
31         }
32     }
33     return 0;
34 }

不知道爲啥字典樹的明明本地輸出都是NO(正確的),評測機那卻都是YES(錯誤的),真神氣,因而寫了個map的。

其實真在考場上趕上字典樹的T,我也傾向於用map,由於簡單好寫不易出錯。

題目來源:COGS