1. 程式人生 > >HDU 1251字典樹

HDU 1251字典樹

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 30346 Accepted Submission(s): 11802

Problem Description

Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首).

Input

輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字串.
注意:本題只有一組測試資料,處理到檔案結束.

Output

對於每個提問,給出以該字串為字首的單詞的數量.

Sample Input

banana

band

bee

absolute

acm

ba

b

band

abc

Sample Output

2

3

1

0

Author

Ignatius.L

Recommend

Ignatius.L

#include<cstring>
#include<cstdio>
struct node{
    int s;
    node *ch[26];
    node(){
        s=0;
        for (int
i=0;i<26;++i) ch[i]=NULL; } }; char tmp,str1[11]; node *tree; void insert1(char str1[]){ node *p=tree; int l=strlen(str1); for (int i=0;i<l;++i){ if (p->ch[str1[i]-'a']==NULL) { node *p1=new node(); p->ch[str1[i]-'a']=p1; } p=p->ch[str1[i]-'a'
]; p->s++; } return ; } int check(char str1[]){ int l=strlen(str1); node *p=tree; for (int i=0;i<l;++i){ if (p->ch[str1[i]-'a']==NULL) return 0; p=p->ch[str1[i]-'a']; } return p->s; } int main(){ freopen("hdu1251.in","r",stdin); //freopen("hdu1251.out","w",stdout); tree=new node(); while(1){ scanf("%c",&tmp); if (tmp=='\n') break; int j=0; while (tmp!='\n'){ str1[j++]=tmp; scanf("%c",&tmp); } str1[j]='\0'; //printf("%s\n",str1); insert1(str1); } /*scanf("%c",&tmp); int i=1,j=0; if (tmp!='\n'){ while (tmp!='\n'){ str1[j++]=tmp; scanf("%c",tmp); } } */ while(scanf("%s",str1)>0){ printf("%d\n",check(str1)); } return 0; }

相關推薦

統計難題 HDU - 1251 (字典)

傳送門 題意:給出一組單詞,然後再給出一組字首,問這組單詞擁有這組字首的單詞數量是多少? 題解:使用字典樹,在insert函式中稍稍變形即可。 附上程式碼: #include<bits/stdc++.h> using namespace std; const int

HDU-1251-字典

原題: Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). Input 輸入資料的第

統計難題 HDU - 1251 -字典-連結串列實現

統計難題  HDU - 1251  題意:輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞 ,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字串

HDU 1251字典

Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 30346 Accepted Subm

hdu 1251 字典

#include <iostream> #include <cstring> #include <cstdio> using namespace std; struct node { int num; in

HDU 5687 字典入門

!= 超過 成了 spl 統計 names cnblogs nbsp otto Problem C Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To

HDU 5536 字典

http insert span del 現場 urn include pri com 題意:就是公式。 這現場賽O(n^3)能過,覺得太沒天理了。 做法:字典樹,枚舉兩個數,然後在字典樹上貪心的跑。 #include <bits/stdc+

Repository HDU - 2846 (字典)

傳送門 題意:給出一組單詞,再給出一組字串,問這組字串在這組單詞出現過多少次? 題解:使用字典樹,對於每個單詞,從每一個位置開始都放入字典樹中,但是有一點要注意,如果字串是abab,這樣如果統計ab那麼豈不是多算了一個麼,所以使用一個數組統計當前到了哪個單詞(具體可見程式碼),最後跟據字典樹

Problem C HDU - 5687(字典的三種操作)

傳送門 題意:有三種操作,第一種是插入一個單詞,第二種是刪除具有這個字首的所有單詞,第三種是查詢是否具有這個字首的單詞 題解:使用字典樹,挑戰最大的是刪除這個操作,可以這樣,如果沒有這個字首直接退出,如果有這個字首,那麼先將這個字首之後所有的都消去,再回上來刪除具有這個字首的數量(很重要),

HDU 1671 字典(判斷是否有一個串是另一個串的子串)。

給你多個由0-9構成的字串集合,問你這個集合中是否有一個字串是其他字串的字首? #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include&l

1251 (字典)

傳送門 題意:給出一組單詞,然後再給出一組字首,問這組單詞擁有這組字首的單詞數量是多少? 題解:使用字典樹,在insert函式中稍稍變形即可。 附上程式碼: #include<bits/stdc++.h> using namespace std; c

Repository HDU - 2846 字典

return name class n) tor con cout () scan   題意:給出很多很多很多很多個 單詞 類似搜索引擎一下 輸入一個單詞 判斷有一個字符串包含這個單詞   思路:字典樹變體,把每個單詞的後綴都扔字典樹裏面,這裏要註意dd是一個單詞 但是把d

Phone List HDU - 1671 字典

題意:給出一堆一組一組的數字  判斷有沒有哪一個是另外一個的字首 思路:字典樹 插入的同時進行判斷  不過 當處理一組數字的時候 需要考慮的有兩點1.是否包含了其他的序列2.是否被其他序列包含   剛開始開的1e4死活不過  1e5直接過了。。 1 #in

hdu 1247 字典

給定一系列的單詞,少於50000個,輸出這些單詞中由兩個出現過的單片語成的單詞。 開始用gets輸入,無限wrong!猜測可能資料中有空行。 換了scanf就AC了。 #include<bitset> //G++ 15ms #include<map>

HDU 1004字典

#include<cstdio> #include<cstring> int n,nn,max,maxi; char st[1100][20]; struct node{

hdu 2846 字典

用指標版本在HDUOJ上的G++會超記憶體,用C++可以過。 用陣列版本在HDUOJ上的G++就可以過了。 指標版本和陣列版本其實用的記憶體理論上是等價的。 原來應該是HDUOJ的評測機是windows執行G++,編譯應該會有一些問題。 指標版本: #include &l

[ACM] hdu 1251 統計難題 (字典

第一次 stdio.h scrip null 明顯 output 代碼 ane 處理 統計難題 Problem Description Ignatius近期遇到一個難題,老師交給他非常多單詞(僅僅有小寫字母組成,不會有反復的單詞出現),如今老師要他統計出以某

統計難題HDU-1251字典

wkt mtu shp isl com shuf rrd xe8 xdg yhly5c梅覆來粕倜叛http://docstore.docin.com/sina_6341912133p1s7b1澇淪家濤缺細http://www.docin.com/gxk352s1mtus俟酚

HDU - 1251 統計難題 【字典Trie】

init nan fail printf pos 小寫 out esp spa Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現),現在老師要他統計出以某個字符串為前綴的單詞數量(單詞本身也是自己的前綴). Input輸入數據

HDU-1251統計難題 ,字典

num node IT print std ret mem algo cstring 題意:問許多單詞中,前綴是某個字符串的個數有多少個; 思路: 用字典樹建立,每個節點帶上num,記錄每次insert是,經過這個點的次數,    每次詢問,找到這個前綴對應的節點的num