<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MATHHEW

      導航

      hihoCoder#1014

      剛開始學習C語言,準備在做hiho的題目的過程中來學習,在此進行記錄,如果代碼中有錯誤或者不當的地方還請指正。

      時間限制:10000ms
      單點時限:1000ms
      內存限制:256MB

      描述

      小Hi和小Ho是一對好朋友,出生在信息化社會的他們對編程產生了莫大的興趣,他們約定好互相幫助,在編程的學習道路上一同前進。

      這一天,他們遇到了一本詞典,于是小Hi就向小Ho提出了那個經典的問題:“小Ho,你能不能對于每一個我給出的字符串,都在這個詞典里面找到以這個字符串開頭的所有單詞呢?

      身經百戰的小Ho答道:“怎么會不能呢!你每給我一個字符串,我就依次遍歷詞典里的所有單詞,檢查你給我的字符串是不是這個單詞的前綴不就是了?

      小Hi笑道:“你啊,還是太年輕了!~假設這本詞典里有10萬個單詞,我詢問你一萬次,你得要算到哪年哪月去?”

      小Ho低頭算了一算,看著那一堆堆的0,頓時感覺自己這輩子都要花在上面了...

      小Hi看著小Ho的囧樣,也是繼續笑道:“讓我來提高一下你的知識水平吧~你知道樹這樣一種數據結構么?”

      小Ho想了想,說道:“知道~它是一種基礎的數據結構,就像這里說的一樣!”

      小Hi滿意的點了點頭,說道:“那你知道我怎么樣用一棵樹來表示整個詞典么?”

      小Ho搖搖頭表示自己不清楚。

      提示一:Trie樹的建立

      “你看,我們現在得到了這樣一棵樹,那么你看,如果我給你一個字符串ap,你要怎么找到所有以ap開頭的單詞呢?”小Hi又開始考校小Ho。

      “唔...一個個遍歷所有的單詞?”小Ho還是不忘自己最開始提出來的算法。

      “笨!這棵樹難道就白構建了!”小Hi教訓完小Ho,繼續道:“看好了!”

      提示二:如何使用Trie樹

      提示三:在建立Trie樹時同時進行統計!

      “那么現在!趕緊去用代碼實現吧!”小Hi如是說道

      輸入

      輸入的第一行為一個正整數n,表示詞典的大小,其后n行,每一行一個單詞(不保證是英文單詞,也有可能是火星文單詞哦),單詞由不超過10個的小寫英文字母組成,可能存在相同的單詞,此時應將其視作不同的單詞。接下來的一行為一個正整數m,表示小Hi詢問的次數,其后m行,每一行一個字符串,該字符串由不超過10個的小寫英文字母組成,表示小Hi的一個詢問。

      在20%的數據中n, m<=10,詞典的字母表大小<=2.

      在60%的數據中n, m<=1000,詞典的字母表大小<=5.

      在100%的數據中n, m<=100000,詞典的字母表大小<=26.

      本題按通過的數據量排名哦~

      輸出

      對于小Hi的每一個詢問,輸出一個整數Ans,表示詞典中以小Hi給出的字符串為前綴的單詞的個數。

      樣例輸入
      5
      babaab
      babbbaaaa
      abba
      aaaaabaa
      babaababb
      5
      babb
      baabaaa
      bab
      bb
      bbabbaab
      樣例輸出
      1
      0
      3
      0
      0
      題目比較簡單,直接給出代碼
      #include <stdio.h>
      #include <stdlib.h>
      
      typedef struct TPoint
      {
          int             Num;
          int                BranchNum;
          struct TPoint    **next;
          char             Symbol;
      }point;
      
      void insert_word(char *word,point *Current);
      int search_prefixion(char *word,point *Current);
      point *search_char(point *Current,char Ch);
      void free_tree(point *Rootp);
      
      int main()
      {
          int n,i;
          char word[10];
          point Rootp={0};
          scanf("%d",&n);
          for(i=0;i<n;i++)
          {
              scanf("%s",word);
              insert_word(word,&Rootp);
          }
      
          scanf("%d",&n);
          for(i=0;i<n;i++)
          {
              scanf("%s",word);
              printf("%d\n",search_prefixion(word,&Rootp));
          }
          free_tree(&Rootp);
          return 0;
      }
      
      void insert_word(char *word,point *Current)
      {
          int i;
          point *tmp;
          for(i=0;word[i]!='\0';i++)
          {
              if((tmp=search_char(Current,word[i]))!=NULL)
              {
                  Current=tmp;
              }
              else
              {
                  if(Current->BranchNum==0)
                      Current->next=(point **)malloc(sizeof(point*));
                  else
                      Current->next=(point **)realloc(Current->next,\
                                      sizeof(point*)*(Current->BranchNum+1));
                  Current->next[Current->BranchNum]=malloc(sizeof(point));
                  Current=Current->next[Current->BranchNum++];
                  Current->Num=0;
                  Current->BranchNum=0;
                  Current->next=NULL;
                  Current->Symbol=word[i];
              }
              Current->Num++;
          }
          return;
      }
      
      int search_prefixion(char *word,point *Current)
      {
          int i;
          point *tmp;
          for(i=0;word[i]!='\0';i++)
          {
              if((tmp=search_char(Current,word[i]))!=NULL)
                  Current=tmp;
              else
                  return 0;
          }
          return Current->Num;
      }
      
      point *search_char(point *Current,char Ch)
      {
          int i;
          for(i=0;i<Current->BranchNum;i++)
          {
              if((Current->next[i])->Symbol==Ch)
                  return Current->next[i];
          }
          return NULL;
      }
      
      void free_tree(point *Current)
      {
          int i;
          if(Current->BranchNum==0)
              return;
          else
          {
              for(i=0;i<Current->BranchNum;i++)
              {
                  free_tree(Current->next[i]);
                  free(Current->next[i]);
              }
              free(Current->next);
          }
          
          return;
      }

       

      posted on 2015-11-28 13:07  MATHHEW  閱讀(187)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国内少妇人妻偷人精品视频| 99久久国产综合精品成人影院 | 国产成人精品久久一区二区| 一本色道久久东京热| 亚洲精品久久一区二区三区四区| 精品日韩人妻中文字幕| 亚洲中文字幕人妻系列| 又大又粗欧美成人网站| 祁东县| 99久久精品久久久久久婷婷| 国外av片免费看一区二区三区| 太深太粗太爽太猛了视频| 熟女系列丰满熟妇AV| 久久精品夜色国产亚洲av| 少妇久久久久久久久久| 色综合天天综合网天天看片| 日韩av日韩av在线| 四虎影视一区二区精品| 亚洲欧美偷国产日韩| 国产三级精品福利久久| 日韩精品中文字一区二区| 亚洲av综合久久成人网| 91精品91久久久久久| 日本一道一区二区视频| japanese无码中文字幕| 精品婷婷色一区二区三区| 自拍偷自拍亚洲精品情侣| 欧美成人片在线观看| 少妇熟女视频一区二区三区| 成人做受视频试看60秒| 国产亚洲精品成人aa片新蒲金| 色色97| 亚洲AV无码专区亚洲AV桃 | 亚洲av首页在线| AV秘 无码一区二| 美欧日韩一区二区三区视频| 成av免费大片黄在线观看| 激情的视频一区二区三区| 国产成人午夜福利院| 少妇人妻偷人精品系列| 国产一级片内射在线视频|