HDU 1247 Hat’s Words Trie題解,hdutrie

來源:互聯網
上載者:User

HDU 1247 Hat’s Words Trie題解,hdutrie

使用Trie的insert函數,主要是要靈活修改search函數,使得其可以快速搜尋hat word。

思路:

1 先搜尋一個word的首碼有沒有在Trie樹中找到,如果找到,儲存這個Node,方便下面繼續搜尋, 就搜尋餘下的能不能是Trie樹上的一個單詞,如果找到,那麼就是hat word了。

2 如果沒找到,那麼就沿著剛剛搜尋到的首碼單詞的節點繼續往下搜,這樣就可以加速程式,不用每次重複搜尋。

3 如果沿著Trie樹已經走到word的葉子節點了,那麼就結束這個word的搜尋了。

實現好這些思路,那麼速度是很快的。


#include <stdio.h>#include <string.h>const int MAX_N = 50001;const int ARR_SZIE = 26;char dict[MAX_N][100];//char dict[MAX_N][15]也AC,10就REint N;struct Node{int n;Node *arr[ARR_SZIE];Node():n(0){for (int i = 0; i < ARR_SZIE; i++){arr[i] = NULL;}}};void delTrie(Node *trie){if (trie){for (int i = 0; i < ARR_SZIE; i++){if (trie->arr[i]) delete trie->arr[i];}delete trie;}}Node *Trie;void insert(char *ch){Node *pCrawl = Trie;int len = strlen(ch);for (int i = 0; i < len; i++){int index = ch[i]-'a';if (!pCrawl->arr[index]) pCrawl->arr[index] = new Node;pCrawl = pCrawl->arr[index];}pCrawl->n++;}int pathLen;Node *searchHat(Node *rt, char *chs, int len){Node *pCrawl = rt;for (int i = 0; i < len; i++){int index = chs[i] - 'a';if (!pCrawl->arr[index]) return NULL;pCrawl = pCrawl->arr[index];pathLen++;if (pCrawl->n) return pCrawl;}if (pCrawl->n) return pCrawl;return NULL;}bool search(Node *rt, char *chs, int len){Node *pCrawl = rt;for (int i = 0; i < len; i++){int index = chs[i] - 'a';if (!pCrawl->arr[index]) return false;pCrawl = pCrawl->arr[index];}return pCrawl->n > 0;}int main(){Trie = new Node;N = 0;while (gets(dict[N])) insert(dict[N++]);for (int i = 0; i < N; i++){int len = strlen(dict[i]);pathLen = 0;Node *node = Trie;while (pathLen < len){node = searchHat(node, dict[i]+pathLen, len-pathLen);if (pathLen < len && node){if (search(Trie, dict[i]+pathLen, len-pathLen)){puts(dict[i]);break;}}}}delTrie(Trie);return 0;}




hdu1251是Trie樹,範例過了,但提交老是wrong answer,幫我看下下面的程式吧

nbnb
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.