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 <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
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.len&&i<b.len;i++)
{
if(b.a[i]<c.a[i]) return true;
else if(b.a[i]>c.a[i]) return false;
}
return b.len<c.len;
}
int hash(char *s,int len)
{
int sum=0;
for(int i=0;i<len;i++)
sum=sum*26+s[i]-'a';
return sum;
}
int main()
{
int n,i,sum=0,top=0;
cin>>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<top) sum=top;
//cout<<sum<<' '<<top<<' '<<i<<endl;
}
cout<<sum<<endl;
return 0;
}
wikioi 1051哈希表的更多相关文章
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- Java 哈希表运用-LeetCode 1 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- ELF Format 笔记(十五)—— 符号哈希表
ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. ...
- Java基础知识笔记(一:修饰词、向量、哈希表)
一.Java语言的特点(养成经常查看Java在线帮助文档的习惯) (1)简单性:Java语言是在C和C++计算机语言的基础上进行简化和改进的一种新型计算机语言.它去掉了C和C++最难正确应用的指针和最 ...
- 什么叫哈希表(Hash Table)
散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫做散列表. - 数据结构 ...
- 【哈希表】CodeVs1230元素查找
一.写在前面 哈希表(Hash Table),又称散列表,是一种可以快速处理插入和查询操作的数据结构.哈希表体现着函数映射的思想,它将数据与其存储位置通过某种函数联系起来,其在查询时的高效性也体现在这 ...
- openssl lhash 数据结构哈希表
哈希表是一种数据结构,通过在记录的存储位置和它的关键字之间建立确定的对应关系,来快速查询表中的数据: openssl lhash.h 为我们提供了哈希表OPENSSL_LHASH 的相关接口,我们可以 ...
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)
Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...
- python数据结构与算法——哈希表
哈希表 学习笔记 参考翻译自:<复杂性思考> 及对应的online版本:http://greenteapress.com/complexity/html/thinkcomplexity00 ...
随机推荐
- telint---切换当前正在运行的Linux系统的运行等级
telint命令用于切换当前正在运行的Linux系统的运行等级 Send control commands to the init daemon. --help Show this help --no ...
- 洛谷 P2360 地下城主
P2360 地下城主 题目描述 你参加了一项秘密任务,在任务过程中你被困在了一个3D的地下监狱里面,任务是计时的,你现在需要在最短的时间里面从地牢里面逃出来继续你的任务.地牢由若干层组成,每一层的形状 ...
- 经验之谈—让你看明确block
事实上我感觉不常常使用block的朋友.对block应该是比較陌生的,那么如今我们来扒开block的真面目,看看block的本质 普通的局部变量.block内部仅仅会引用它初始的值(block定义那一 ...
- jquery--this
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- js12---闭包,原型,继承
<html> <body> <script type="text/javascript"> //闭包实现了函数层面多个子函数共享父类函数的属性. ...
- 7lession-基础数据使用介绍
1.数值 这个使用比较简单 a = 1 b = 3.2 c = 12.5+4j d = 20L 2.字符串 代码 s = "hello world,i am comming" pr ...
- android图像处理(3)浮雕效果
这篇将讲到图片特效处理的浮雕效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:用前一个像素点的RGB值分别减去当前像素点的RGB值并加上127作为当前像素点的RGB值. 例: ABC 求B ...
- R 语言下常用第三方库的说明
1. doBy 官方文档见 CRAN - Package doBy doBy 主要适用于以下操作: 1) Facilities for groupwise computations of summar ...
- 71.sscanf数据挖掘
数据挖掘 sscanf(str, "%d %s %s %d %d %s %s %s", &ph[i].id, ph[i].name, ph[i].sex, &ph[ ...
- Redis .Net客户端源码
1.简单介绍 当前NoSql使用已经极为普遍,无论是Java生态圈,还是.net生态圈.大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.主流的技术有:H ...