POJ2549【hash分离链接法】
题意:
给n个不同的数,求一个4个数(a,b,c,d)的组合满足a+b+c=d;求最大的d。
思路:
没想到可以用hash搞/
这个就是数据结构里的分离链接法~
解决hash冲突的方法:将所有关键字为同义词的结点链接在同一单链表中。
a+b+c=d转化成a+b=d-c;
先将所有的a+b hash掉。
然后用 d-c 去找。
复杂度n^2*HASH;
#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
const int mod=5e5+10;
const int N=5e5+10;
struct Node{
int x,y;
};
Node q[N];
int Ha[mod],nex[mod],s[1010],res,n;
bool flag;
void solve(int x,int y)
{
int key=(x-y+mod)%mod;
int i=Ha[key];
while(i!=-1)
{
while((q[i].x+q[i].y)==(x-y)&&q[i].x!=x&&q[i].x!=y&&q[i].y!=y&&q[i].y!=x)
{
res=x;
flag=true;
return;
}
i=nex[i];
}
}
int main()
{
while(scanf("%d",&n)&&n)
{
for(int i=0;i<n;i++) scanf("%d",&s[i]);
int tot=0;
sort(s,s+n);
memset(Ha,-1,sizeof(Ha));
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
q[tot].x=s[j];q[tot].y=s[i];
int key=(s[i]+s[j]+mod)%mod;
nex[tot]=Ha[key];
Ha[key]=tot;
tot++;
}
res=-1000000000;
flag=false;
for(int i=n-1;i>=1;i--)
for(int j=i-1;j>=0;j--)
{
if(flag) break;
solve(s[i],s[j]);
}
if(res!=-1000000000)
printf("%d\n",res);
else
puts("no solution");
}
return 0;
}
POJ2549【hash分离链接法】的更多相关文章
- 解决hash冲突之分离链接法
解决hash冲突之分离链接法 分离链接法:其做法就是将散列到同一个值的所有元素保存到一个表中. 这样讲可能比较抽象,下面看一个图就会很清楚,图如下 相应的实现可以用分离链接散列表来实现(其实就是一个l ...
- JAVA数据结构--哈希表的实现(分离链接法)
哈希表(散列)的定义 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度 ...
- Python与数据结构[4] -> 散列表[1] -> 分离链接法的 Python 实现
分离链接法 / Separate Chain Hashing 前面完成了一个基本散列表的实现,但是还存在一个问题,当散列表插入元素冲突时,散列表将返回异常,这一问题的解决方式之一为使用链表进行元素的存 ...
- 分离链接法(Separate Chaining)
之前我们说过,对于需要动态维护的散列表 冲突是不可避免的,无论你的散列函数设计的有多么精妙.因此我们解决的重要问题就是:一旦发生冲突,我们该如何加以排解? 我们在这里讨论最常见的两种方法:分离链接法和 ...
- Python实现哈希表(分离链接法)
一.python实现哈希表 只使用list,构建简单的哈希表(字典对象) # 不使用字典构造的分离连接法版哈希表 class HashList(): """ Simple ...
- HashTable 解决碰撞(冲突)的方法 —— 分离链接法(separate chaining)
1. ListNode 及 HashTable 的类型声明 声明 typedef int ElementType; typedef unsigned int Index; struct ListNod ...
- 分离链表法散列ADT
分离链表法解决冲突的散列表ADT实现 数据结构定义如下: struct ListNode; typedef struct ListNode *Position; struct HashTbl; typ ...
- luogu P5043 【模板】树同构 hash 最小表示法
LINK:模板 树同构 题目说的很迷 给了一棵有根树 但是重新标号 言外之意还是一棵无根树 然后要求判断是否重构. 由于时无根的 所以一个比较显然的想法暴力枚举根. 然后做树hash或者树的最小表示法 ...
- 分离链接散列表C语言实现实例
/* hash_sep.h */ #ifndef _HASH_SEP_H #define _HASH_SEP_H #define MIN_TABLE_SIZE 5 struct list_node; ...
随机推荐
- 在RedHat Linux系统中安装和配置snmp服务
检查系统是否安装snmp服务 # rpm -qa|grep snmp net-snmp-5.3.2.2-17.el5 net-snmp-perl-5.3.2.2-17.el5 net-snmp-dev ...
- MLGBZ
April cloudy, boss rainy, told me he want to kick But coming so,Formosa Heart sad , Down,down,down W ...
- Python环境问题
http://installion.co.uk/ubuntu/precise/main/p/python3.2/uninstall/index.html
- pkg-config设置
pkg-config在一些源码管理中会被使用到. 介绍 上网查资料,知道了pkg-config这个东西,下面简单介绍一下. pkg-config提供了下面几个功能: 检查库的版本号.如果所需要的库的版 ...
- Windows、Linux、Mac OSX编译jni动态库
在不同平台下默认调用不同名字的动态库,在Windows平台调用name.dll,在Linux平台调用libname.so,在OSX下调用libname.jnilib.不同平台下的编译的方法也有些区别. ...
- BZOJ 2819 Nim 树链剖分+树状数组
这题真没什么意思. 不过就是将普通的求Min,Max,求和等东西换成Xor,偏偏Xor还有很多性质. 算是刷道水题吧. #include<iostream> #include<cst ...
- 在eclipse创建Maven工程修改默认JRE
1. 打开Maven安装目录的setting.xml文件 2.找到profiles标签 3.加入下面配置即可 <profile> <id>jdk-1.8</id&g ...
- Java的访问权限修饰符
default或者friendly表示默认的访问权限修饰符.
- android自定义控件(六) 刷新
三种得到LinearInflater的方法 a. LayoutInflater inflater = getLayoutInflater(); b. LayoutInflater localinfla ...
- asteris录音设置
[macro-recording] exten =>s,1,Set(CALLFILENAME=${STRFTIME(${EPOCH},UTC-8,%Y-%m-%d-%H-%M-%S)}-${CA ...