POJ2945鏈式字典樹解決方案

2021-09-25 03:32:28 字數 1360 閱讀 8662

首先,我們的思路是用鏈式的字典樹結構,解決poj2945這道題

題意是,統計所有的字串出現的次數,並依次輸出各個次數的數量

例如:input

9 6aaaaaa

acacac

gttttg

acacac

gttttg

acacac

acacac

tccccc

tccccc

out遇到的一些小麻煩 : 之前提交poj爆記憶體了,就試了一下這個**,結果還是爆記憶體,後來發現,我這裡不能設定位 node *next[26],不然鐵定爆記憶體,於是我認真審題,發現這裡設定為4就好啦因為只有4個字元需要入樹,至於怎麼判斷下標,我們用乙個fun()函式來解決就好了。

具體的思路就是 : 先用find()判斷,是否在樹里有該個dna,如果有讓,count[i]–,i++,;count[i]++, 如果沒有,用t_insert插入,並給count[1]置為1;

最後輸出for(i::n)printf("%d\n",count[i]);就可以了。

#include #include #pragma comment(linker, "/stack:1024000000,1024000000")    

#include using namespace std;

struct node

};node *root =new node('\0');

int *count;

//int *count;

int fun(char s)

}bool t_find(char *s)

count[p->count]--; //如果 程式執行到最後,出現過兩次了,那麼 p->count 出現過一次的 count[p->count] -- ,也就是給出現一次的次數減一

p->count++; //然後給 p->count 置為出現過2 次

count[p->count]++;

return true;

}void t_insert(char *s)

p=p->next[pos];

}p->count=1;

count[p->count]++;}/*

9 6aaaaaa

acacac

gttttg

acacac

gttttg

acacac

acacac

tccccc

tccccc

0 0*/

int main()

}int i=0;

for( i=1;i<=n;i++)

}return 0;

}

UVA 11732 鏈式字典樹

給一些字串,問如果使用strcmp函式對這些字串兩兩比較,需要進行多少次字元比較。strcmp函式在題目中已給出,如果字元相等,則還需要將該字元與 0 進行比較 鏈式字典樹我自己的叫法,網上大多數題解都把這種字典樹叫做左兒子,右兄弟的字典樹,但是這種叫法感覺會引起誤解。一開始我以為右兄弟是根的兄弟,...

POJ 2503 Babelfish(字典樹入門)

題目意思 就是給出一些單詞的對應關係,然後輸入一些單詞,把他們翻譯成對應的 單詞,如果要查詢的單詞不存在,輸出eh.字典樹模板題目,入門題。include include include include using namespace std const int maxn 26 typedef st...

POJ 3764 (異或 字典樹)

早就聽過用字典樹求異或最大值,然而沒做過。發現一碰到異或的題就gg,而且因為以前做過的一道類似的題 事實上並不類似 限制了思路,蠢啊 題意 一棵帶權的樹,求任意兩點間路徑異或的最大值。題解 設xor a,b 是求a,b間路徑的異或值,那麼xor a,b xor root,a xor root,b 因...