西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)VC|VC++ → HDU 上的ACM字典樹參考代碼

HDU 上的ACM字典樹參考代碼

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:本站整理時間:2010/12/8 8:40:48字體大。A-A+

作者:佚名點擊:242次評論:0次標簽: HDU ACM 字典樹

HduIn在杭電app3.21 官網(wǎng)安卓版
  • 類型:網(wǎng)絡(luò)瀏覽大。5.1M語言:中文 評分:.0
  • 標簽:
立即下載
 要看論文準備畢業(yè)設(shè)計了,好幾周都沒有搞ACM了,今天實在手癢了,就去hdu上溜達了一圈,挑幾個題做,于是乎就看到了這個題,典型的字典樹。

題目要求輸出以某個字符串為前綴的word的數(shù)目,建立字典樹之后就是個簡單的查詢了,為了性能采用了靜態(tài)字典樹,由于不知道會有多少個單詞就猜了下感覺10w應該夠了吧,提交上去access violation,明顯的越界訪問,修改為20W一樣出錯,后來火了,直接開到50w過了,測試數(shù)據(jù)相當狠呀。

不多說了,參考代碼如下。
#include <stdio.h>
#include <stdlib.h>
struct node
{
int cnt;
int childs[26];
};
int avail = 1;
int cur = 0;
struct node tree[500000];
char buf[15];
int main(void)
{
int i;
int root;
int index;
int flag;
/*freopen("in.txt", "r", stdin);*/
while (fgets(buf, 15, stdin) != NULL && buf[0] != '\n')
{
i = 0;
root = 0;
while (buf[i] != '\n')
{
index = buf[i]-'a';
if (tree[root].childs[index] == 0)
{
tree[root].childs[index] = avail++;
}
++tree[tree[root].childs[index]].cnt;
root = tree[root].childs[index];
++i;
}
}

while (fgets(buf, 15, stdin) != NULL && buf[0] != '\n')
{
i = 0;
root = 0;
flag = 1;
while (buf[i] != '\n')
{
index = buf[i] - 'a';
if (tree[root].childs[index] == 0)
{
flag = 0;
break;
}
root = tree[root].childs[index];
++i;
}
printf("%d\n", flag == 1 ? tree[root].cnt : 0);
}
return 0;
}

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    第 1 樓 上海浦東新有線通 網(wǎng)友 客人 發(fā)表于: 2010/12/19 17:22:01
    能說明說明意思那最好了

    支持( 0 ) 蓋樓(回復)

    最新評論

    第 1 樓 上海浦東新有線通 網(wǎng)友 客人 發(fā)表于: 2010/12/19 17:22:01
    能說明說明意思那最好了

    支持( 0 ) 蓋樓(回復)

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)