★ 輸入文件:asm_talk.in
輸出文件:asm_talk.out
簡單對比
時間限制:2 s 內存限制:256 MBphp
「人吶都不知道,本身不能夠預料,直升機剛一出聖地亞哥就把我丟到大家船上,說中央已經決定了,讓我來幫忙監聽無線電信號……」人工智能
美國海軍「無蛤」號電子測量船的船長,斯科特·華萊士繼續把玩着手中的鴨嘴筆,「我們就在你要監聽的那我的工智能艦隊眼皮底下,你怎麼知道這麼做死沒問題?」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