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 ...
随机推荐
- halt---关闭正在运行的Linux操作系统。
halt命令用来关闭正在运行的Linux操作系统.halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统. 语法 halt(选项) 选 ...
- 今日SGU 5.7
SGU 169 题意:求k位数里面有多少个是完美数,完美数的定义就是n是好数,n+1也是好数,那么n就是完美数,好数就是n%p(n)==0&&p(n)!=0,p(n)=a1*...*a ...
- Spring3 整合MyBatis3 配置多数据源 动态选择SqlSessionFactory(转)
1. Spring整合MyBatis切换SqlSessionFactory有两种方法,第一. 继承SqlSessionDaoSupport,重写获取SqlSessionFactory的方法.第二.继承 ...
- 【吴节操点评】中国企业SaaS应用深谙未来者寥寥数几 两极分化将加剧
数年前,在国外企业级应用如火如荼的时候.国内却是一片空白.而现在企业SaaS应用市场,包含用友.金蝶.东软在内的三巨头.已经有数十家之多.相比美国3000亿美元的企业应用三巨头来说,中国企业应用前三甲 ...
- 【2017"百度之星"程序设计大赛 - 初赛(B)】Chess
[链接]http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=776&pid=1001 [题意] 在这里写题意 [题 ...
- Spring.net的Demo项目,了解什么是控制反转
Spring这个思想,已经推出很多年了. 刚开始的时候,首先是在Java里面提出,后来也推出了.net的版本. Spring里面最主要的就是控制反转(IOC)和依赖注入(DI)这两个概念. 网上很多教 ...
- ASM(四) 利用Method 组件动态注入方法逻辑
这篇继续结合样例来深入了解下Method组件动态变更方法字节码的实现.通过前面一篇,知道ClassVisitor 的visitMethod()方法能够返回一个MethodVisitor的实例. 那么我 ...
- bootstrap课程10 从外部引入视频到页面用什么标签
bootstrap课程10 从外部引入视频到页面用什么标签 一.总结 一句话总结:a.iframe标签:b.embed标签:c.video标签 1.bootstrap具有响应式特性的嵌入内容如何实现? ...
- 16、cgminer学习之:pthread_mutex_init和pthread_cond_init
1.原理 假设有两个线程同时访问一个全局变量 n,这个全局变量的初始值等于0. Int n = 0 ; 消费者线程 A 进入临界区,访问 n,A 必须等到 n 大于 0 才能接着往下执行,如果 n= ...
- Flask项目之手机端租房网站的实战开发(八)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/8 ...