背景:為了方便九宮格手機使用者發簡訊,希望在使用者按鍵時,根據提供的字典(給出字串和頻數),給出各個階段最有可能要打的單詞。
題意: 首先給出的是字典,每個單詞有乙個出現頻率。然後給出的是詢問,每個詢問有乙個數字字串,代表在手機上按了哪些鍵,以1結束。問按鍵的過程中最可能出現的單詞分別是哪些。
思路:搞了很久.......一開始總想著以字母為各結點如何建樹,詢問......還是太年輕了。
以手機8個鍵作為字典樹各節點,每個結點對映3-4對應的字母。每個結點存頻率最高的串,詢問的時候也可以方便的直接詢問了。
還是太年輕了.........理解題意為具有相同字首的串的頻率是高的覆蓋低的........其實是疊加...........一直沒看出來。
題目是按照字典序公升序給出字典的,所以可以把相同的字首頻率相加,這樣只是插入一次了。
接下來就是基本字典樹的寫法了
#include #include #include using namespace std;
char book = ; //對映
char str[1111][111];
int cou[1111][111];
struct trie
}*root;
void insert(char *key,int i)
p = p->next[t];
tmp[ind] = '\0';
if(p->num < cou[i][j])
j++;
}}void query(char *key)
p = p->next[t];
printf("%s\n",p->word);
key ++;
}}void free(trie *p)
delete p;
}int main() {
#ifndef online_judge
freopen("in.txt","r",stdin);
freopen("d:\\hehe.txt","w",stdout);
#endif
int t,cnt;
cin >> t;
int casee = 1;
while(t --) {
root = new trie();
int n,i;
scanf("%d",&n);
for(i=0; i
POJ 1451 T9 字典樹好題
題意 原來的按鍵手機都一般是九鍵,九鍵輸入英文很麻煩,例如要鍵入 hello 必須按兩次鍵4 兩次鍵3 三次鍵5 三次鍵5,最後按三次鍵6。現有一種新的輸入方案名叫 t9 只需要不重複地按鍵,軟體就會使用內建的字典來查詢最可能的與輸入匹配的單詞。例如,輸入 hello 只要依次按下4,3,5,5,6...
POJ 1451 T9 字典樹 優先佇列
題意 給你一些單詞 和優先值 然後當你按下數字的時候首先會出現哪個單詞 就是我們平時手機的按鍵 思路 建一顆字典樹 因為按乙個數字對應多個字母 那麼就有多種情況 我們要輸出權值最大的乙個 我用了優先佇列 這裡每個字首的優先值是所有單詞優先值的和 例如abc 5 abd 6 acd 7 那麼a這個字首...
hdu2846(字典樹好題)
字典樹的好題 題意 給你n個串,然後又q次詢問,輸出n個串中包含改串的個數 思路 這題非常考驗個人的分析能力,最初的想法是用ac自動機或者是字尾陣列做,但有感覺不可行,最後看了題解才知道要用字典樹,對n個串的子串的字首建立字典樹,注意 同乙個串可能有相同的子串,所以要有個flag標記。首先要注意的是...