• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ACM___________________________

            ______________白白の屋
            posts - 182, comments - 102, trackbacks - 0, articles - 0
            <2010年8月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            常用鏈接

            留言簿(24)

            隨筆分類(332)

            隨筆檔案(182)

            FRIENDS

            搜索

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋    

             

            題目地址 :

                 http://acm.hdu.edu.cn/showproblem.php?pid=1247 

            題目描述:

            Hat’s Words

            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
            Total Submission(s): 1384    Accepted Submission(s): 506


            Problem Description
            A hat’s word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.
            You are to find all the hat’s words in a dictionary.
             

            Input
            Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 50,000 words.
            Only one case.
             

            Output
            Your output should contain all the hat’s words, one per line, in alphabetical order.
             

            Sample Input
            a ahat hat hatword hziee word
             

            Sample Output
            ahat hatword
             

            題目分析 :

              

                    字典樹(shù)的題目, 這個(gè)題的方法比較暴力,  在輸入的時(shí)候?qū)⒚總€(gè)單詞都加入字典樹(shù),  并用數(shù)組將所有的串都存起來(lái)來(lái).

            在輸入完成后,  對(duì)每個(gè)單詞進(jìn)行拆分, 也就是暴力枚舉單詞不同位置的前后部分, 看在字典樹(shù)中是否存在, 存在即輸出.

            不過(guò)貌似數(shù)據(jù)比較弱, 說(shuō)是按字典順序輸出, 但其實(shí)他的輸入本就是按字典順序輸入的, 所以將排序也面了 , 呵呵.

                另外,其實(shí)這題用STL 做更簡(jiǎn)單, 當(dāng)然追求效率除外.

            trie 代碼:

             /*

            MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋

                      http://www.cnblog.com/MiYu

            Author By : MiYu

            Test      : 1

            Program   : 1247

            */


            #include <iostream>

            #include <algorithm>

            #include <string>

            using namespace std;

            typedef struct dictor DIC;

            DIC *root = NULL;

            struct dictor {

                   dictor (){ exist = false; memset ( child , 0 , sizeof ( child ) ); }

                   void insert ( char *ins );

                   bool find ( const char *ins );

            private:

                   DIC *child[26];

                   bool exist; 

            };

            void dictor::insert ( char *ins )

            {

                        DIC *cur = root,*now;

                        int len = strlen ( ins );

                        for ( int i = 0; i < len; ++ i )

                        {

                              if ( cur->child[ ins[i] - 'a' ] != NULL ) 

                              {

                                   cur = cur->child[ ins[i] - 'a' ];

                              }

                              else

                              {

                                   now = new DIC;

                                   cur->child[ ins[i] - 'a' ] = now;

                                   cur = now;

                              }

                        } 

                        cur->exist = true;

            }

            bool dictor::find ( const char *ins )

            {

                        DIC *cur = root;

                        int len = strlen ( ins );

                        for ( int i = 0; i < len; ++ i )

                        {

                             if ( cur->child[ ins[i] - 'a' ] != NULL )

                                  cur = cur->child[ ins[i] - 'a' ];  

                             else

                                  return false; 

                        } 

                        return cur->exist;

            }

            char words[50050][100];

            char s1[100],s2[100];

            DIC dict;

            int main ()

            {

                root = &dict;

                int n = 0;

                while ( scanf ( "%s",words[n] ) != EOF )

                {

                        dict.insert ( words[n++] );

                }

                for ( int i = 0; i < n; ++ i )

                {

                      int len = strlen ( words[i] );

                      for ( int j = 1; j < len; ++ j )

                      {

                            memset ( s1, 0, sizeof ( s1 ) );

                            memset ( s2, 0, sizeof ( s2 ) );

                            strncpy ( s1, words[i], j );

                            strcpy ( s2, words[i]+j );

                            if ( dict.find ( s1 ) && dict.find ( s2 ) )

                            {

                                 printf ( "%s\n", words[i] );

                                 break; 

                            }

                      }  

                }  

                //system ( "pause" );

                return 0;

            }


            STL  代碼 :

             

             /*

            MiYu原創(chuàng), 轉(zhuǎn)帖請(qǐng)注明 : 轉(zhuǎn)載自 ______________白白の屋

                      http://www.cnblog.com/MiYu

            Author By : MiYu

            Test      : 2

            Program   : 1247

            */


            #include <iostream>

            #include <string>

            #include <map>

            using namespace std;

            map < string , int > mp;

            string str[50005];

            int main ()

            {

                int n = 0;

                while ( cin >> str[n] ) mp[ str[n++] ] = 1;

                for ( int i = 0; i < n; ++ i )

                {

                      unsigned len = str[i].size ();

                      for ( unsigned j = 1; j < len; ++ j )

                      {

                           string s1 ( str[i], 0, j );

                           string s2 ( str[i], j );

                           if ( mp[s1] == 1 && mp[s2] == 1 )

                           {

                                cout << str[i] << endl; 

                                break;

                           }

                      } 

                }

                return 0;

            }


             

             

            久久婷婷国产麻豆91天堂| 久久久久久精品免费看SSS | 久久精品无码专区免费东京热| 久久夜色精品国产| 久久久久亚洲AV成人网人人网站| 久久久久人妻一区精品色| 99久久www免费人成精品| 热久久最新网站获取| 成人久久久观看免费毛片| 欧美国产精品久久高清| 久久99国产精一区二区三区| 欧洲国产伦久久久久久久 | 亚洲精品国产成人99久久| 中文精品久久久久人妻| 亚洲国产成人久久综合一| 久久久亚洲裙底偷窥综合 | 免费无码国产欧美久久18| 国产高潮国产高潮久久久| 欧美精品乱码99久久蜜桃| 久久九九亚洲精品| 久久久久国产精品熟女影院| 久久综合九色欧美综合狠狠| 久久精品成人免费网站| 99久久精品免费看国产一区二区三区| 久久99精品久久久久久9蜜桃| 久久精品国产亚洲av高清漫画| 亚洲欧美另类日本久久国产真实乱对白 | 国产日韩久久久精品影院首页| 久久SE精品一区二区| 日本亚洲色大成网站WWW久久| 亚洲国产天堂久久综合网站 | 久久久久亚洲av成人网人人软件| 久久精品成人免费国产片小草| 精品久久久久久国产91| 国产精品久久毛片完整版| 东京热TOKYO综合久久精品| AV无码久久久久不卡网站下载 | 亚洲国产高清精品线久久| 久久伊人影视| 精品久久久无码21p发布| 久久久久久久久波多野高潮|