设为首页 加入收藏

TOP

wikioi 1051哈希表
2015-07-20 18:07:19 来源: 作者: 【 】 浏览:7
Tags:wikioi 1051 哈希

题目描述 Description

给出了N个单词,已经按长度排好了序。如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙)。

你的任务是:对于输入的单词,找出最长的龙。

输入描述 Input Description

第一行为N(1<=N<=105)。以下N行每行一个单词(由小写组成),已经按长度排序。(每个单词长度<50)

输出描述 Output Description

仅一个数,为最长的龙的长度。

样例输入 Sample Input

5

i

a

int

able

inter

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

1<=N<=105



思路:这题就是要用到哈希函数匹配字符串是否接龙,但是在处理上感觉比较机智的是栈的应用上,因为这题刚开始我也没太懂,所以费了100积分下载了别人
的代码,研究了好久才明白。在二维字符串数组排序上,对sort函数又加深了认识,不能直接来排序,二维数组在sort中不可以直接放入排序的。栈又把时间提
高了好多,达到了线性条件。

#include 
  
   
#include 
   
     #include 
    
      #include
     
       using namespace std; struct node { int len; char a[55]; }e[100005]; int Stack[100005]; bool operator < (node b,node c) { for(int i=0;i
      
       c.a[i]) return false; } return b.len
       
        >n; for(i=1; i<=n; i++) { scanf("%s",e[i].a); e[i].len=strlen(e[i].a); } sort(e+1,e+n+1); for(i=1;i<=n;i++) { while((top)&&e[i].len<=e[Stack[top]].len||hash(e[Stack[top]].a,e[Stack[top]].len)!=hash(e[i].a,e[Stack[top]].len)) top--; Stack[++top]=i; if(sum
        
         

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇CF 447A(DZY Loves Hash-简单判重) 下一篇hdu 4544 湫湫系列故事――消灭兔..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: