HDOJ 1247 -- Hat Words Trie

原创

转载请注明www.cnblogs.com/yewei

 

思路:先将所有的单词插入到 Trie 中,然后对于每个单词枚举前后位置

  1 /*
  2 PROG:   Hat’s Words
  3 ID  :   yewei
  4 LANG:   C++
  5 */
  6 #include <cstdio>
  7 #include <cstdlib>
  8 #include <cstring>
  9 #include <memory.h>
 10 
 11 //const int size = 102;
 12 const int maxn = 50004;
 13 
 14 struct Trie_Node
 15 {
 16     bool IsEnd;
 17     Trie_Node *branch[27];
 18     Trie_Node():IsEnd( false )
 19     {
 20         memset( branch, 0, sizeof(branch) );
 21     }// Init
 22 };
 23 
 24 class Trie
 25 {
 26     public:
 27         Trie();
 28         void Trie_Insert( char ss[] );
 29         bool Trie_Find( char ss[] );
 30     
 31     private:
 32         Trie_Node *root;
 33 }t;
 34 
 35 Trie::Trie()
 36 {
 37     root = new Trie_Node();
 38 }// Trie
 39 
 40 void Trie::Trie_Insert( char ss[] )
 41 {
 42     Trie_Node *ptr = root;
 43     int slen = strlen( ss );
 44     for ( int i=0; i<slen; ++i )
 45     {
 46         if ( ptr->branch[ ss[i]-'a' ]==NULL )
 47         {
 48             Trie_Node *temp = new Trie_Node();
 49             ptr->branch[ ss[i]-'a' ] = temp;
 50         }
 51         
 52         ptr = ptr->branch[ ss[i]-'a' ];
 53     }// End of for
 54     
 55     ptr->IsEnd = true;
 56     //delete temp;
 57 }// Trie_Insert
 58 
 59 bool Trie::Trie_Find( char ss[] )
 60 {
 61     Trie_Node *ptr = root;
 62     int slen = strlen( ss );
 63     for ( int i=0; i<slen; ++i )
 64     {
 65         if ( ptr->branch[ ss[i]-'a' ]!=NULL )
 66             ptr = ptr->branch[ ss[i]-'a' ];
 67         else
 68             return false;
 69     }
 70     
 71     return ptr->IsEnd;
 72 }// Trie_Find
 73 
 74 int  M=0;
 75 char words[maxn][15];
 76 
 77 void ReadData()
 78 {
 79     while ( EOF!=scanf("%s", words[M]) )
 80     {
 81         t.Trie_Insert( words[M++] );
 82     }// Insert into Trie
 83 }// ReadData
 84 
 85 void Solve()
 86 {
 87     int  tlen;
 88     char s1[15], s2[15];
 89     for ( int i=0; i<M; ++i )
 90     {
 91         tlen = strlen( words[i] );
 92         if ( tlen<2 )   continue;
 93         for ( int j=1; j<tlen; ++j )
 94         {
 95             memset( s1, 0, sizeof(s1) );
 96             memset( s2, 0, sizeof(s2) );
 97             strncpy( s1, words[i], j );
 98             strcpy( s2, words[i]+j );
 99             
100             if ( t.Trie_Find( s1 ) && t.Trie_Find( s2 ) )
101             {
102                 printf("%s\n", words[i]);
103                 break;
104             }    
105         }
106     }// End of for
107 }// Solve
108 
109 int main()
110 {
111     ReadData();
112     Solve();
113     
114     return 0;
115 }

转载于:https://www.cnblogs.com/yewei/archive/2012/08/09/2628940.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值