HDU-1251-字典樹
阿新 • • 發佈:2018-12-19
原題: Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). Input 輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字串.
注意:本題只有一組測試資料,處理到檔案結束. Output 對於每個提問,給出以該字串為字首的單詞的數量. Sample Input banana band bee absolute acm
ba b band abc Sample Output 2 3 1 0 題意: 輸入不定量的以某個字元為字首的字串,輸入空行後開始提問,每一次提問都是一個字串代表字首,要求輸出以該字串為字首的字串數量。 題解: 一、 我們很容易想到用map<string,int>建立字首與次數的對映,之後直接輸出次數即可,但是這樣寫時間幾乎是別人的七倍。 附上AC程式碼:
#include <iostream> #include <cstring> #include <map> #include <cstdio> using namespace std; map<string,int> pre;//定義一個map容器,以字串作為關鍵字,建立與出現次數(int)的對映 int main() { char s[15]; while(gets(s))//得到一整行的字串 { if(s[0]=='\0')break;//由於gets()遇到回車會自動轉換為'\0',所以此語句為判斷是否為空行 string tmp=""; for(int i=0;i<strlen(s);++i)//對於每一個輸入的字串,記錄每一種開頭的map對映 { tmp+=s[i]; pre[tmp]++; } } while(cin>>s) { cout<<pre[s]<<endl;//直接輸出該字串對應的次數 } return 0; }
歡迎評論!