poj1840 哈希
虽然这题目我曾经在我们学校OJ上做过但是我那时候是用的暴力做的,这次我用的是哈希写的,我写这题目时候开始是在main函数里面写哈希感觉很麻烦很不清晰,然后我换用函数来写,清晰了很多,写完就AC了。用哈希存储前两项的值,然后遍历后三项再去哈希表中寻找这个值在前两项中出现的次数,加起来就OK了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define aabs(x) (x)>0?(x):-(x)
#define mod 999983
#define t(x) (x)*(x)*(x)
struct node{
int num;
node *next;
int cnt;
}p[mod];
int sign[mod]; void hash(int res){
int key;
key=(aabs(res)) % mod;
node *op;
if(sign[key]==){
p[key].num=res;
p[key].cnt++;
p[key].next=NULL;
sign[key]=;
return;
}else if(sign[key]==){
op=&p[key];
while(){
if(res==op->num){
op->cnt++;
return ;
}
if(op->next!=NULL){
op=op->next;
}else break;
}
}
node *tmp=(node *)malloc(sizeof(node));
tmp->num=res;
tmp->cnt=;
tmp->next=NULL;
op->next=tmp;
return;
}
int find_hash(int res){
int cnt=;
int key=(aabs(res)) % mod;
if(sign[key]==){
return ;
}else if(sign[key]==){
node *op=&p[key];
while(){
if(res+op->num==){
cnt=op->cnt;
}
if(op->next!=NULL){
op=op->next;
}else break;
}
}
return cnt;
} void init(){
memset(sign,,sizeof(sign));
for(int i=;i<mod;++i){
p[i].next=NULL;
p[i].cnt=;
}
return ;
} int main(){
int a1,a2,a3,a4,a5,x1,x2,x3,x4,x5;
int i,j,key;
int res,cnt;
while(~scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5)){
cnt=;
init();
for(x1=-;x1<=;++x1){
for(x2=-;x2<=;++x2){
if(x1==||x2==) continue;
res=(t(x1))*a1+(t(x2))*a2;
hash(res);
}
} for(x3=-;x3<=;++x3)
for(x4=-;x4<=;++x4)
for(x5=-;x5<=;++x5){
if(x3==||x4==||x5==) continue;
res=t(x3)*a3+t(x4)*a4+t(x5)*a5;
cnt+=find_hash(res);
}
printf("%d\n",cnt);
}
return ;
}
poj1840 哈希的更多相关文章
- poj1840 五项式等于0(哈希)
题目传送门 题意很好懂,注意一下xi不能等于0 思路:智商检测题,一开始想着五重for暴力...Orz,后来移向(把a4a5移到右边)了发现减了1e8数量级的复杂度,再次Orz,所以直接三重循环,记录 ...
- [PHP内核探索]PHP中的哈希表
在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据 ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- Java 哈希表运用-LeetCode 1 Two Sum
Given an array of integers, find two numbers such that they add up to a specific target number. The ...
- 网络安全——Base64编码、MD5、SHA1-SHA512、HMAC(SHA1-SHA512)哈希
据说今天520是个好日子,为什么我想起的是502.500.404这些?还好服务器没事! 一.Base64编码 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之 ...
- Oracle 哈希连接原理
<基于Oracle的sql优化>里关于哈希连接的原理介绍如下: 哈希连接(HASH JOIN)是一种两个表在做表连接时主要依靠哈希运算来得到连接结果集的表连接方法. 在Oracle 7.3 ...
- SQL连接操作符介绍(循环嵌套, 哈希匹配和合并连接)
今天我将介绍在SQLServer 中的三种连接操作符类型,分别是:循环嵌套.哈希匹配和合并连接.主要对这三种连接的不同.复杂度用范例的形式一一介绍. 本文中使用了示例数据库AdventureWorks ...
- BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2046 Solved: 749[Submit][Statu ...
- [bzoj3207][花神的嘲讽计划Ⅰ] (字符串哈希+主席树)
Description 背景 花神是神,一大癖好就是嘲讽大J,举例如下: “哎你傻不傻的![hqz:大笨J]” “这道题又被J屎过了!!” “J这程序怎么跑这么快!J要逆袭了!” …… 描述 这一天D ...
随机推荐
- tar.gz和rpm安装文件(转载)
from:http://bbs.chinaunix.net/thread-2277750-1-1.html Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容 ...
- Mac 上SVN上传.a文件
SVN默认是忽略.a文件,所以修改配置文件去掉忽略配置行的 *.a 通过终端打开配置文件: open ~/.subversion/config 把下面两行(也可能是一行)中的注释和*.a去掉, #gl ...
- Python进阶02 文本文件的输入输出
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python具有基本的文本文件读写功能.Python的标准库提供有更丰富的读写功能 ...
- 衔接UI线程和管理后台工作线程的类(多线程、异步调用)
一个不错的UI多线程操作类 http://www.cnblogs.com/net66/archive/2005/08/03/206132.html
- linux内核hash list
源码: #ifndef _LINUX_HLIST_H #define _LINUX_HLIST_H /* * Double linked lists with a single pointer lis ...
- POJ 2182【树状数组】
题意: 每头牛有编号,他们乱序排成一排,每头牛只知道前边比自己序号小的有几位. 思路: 递推,最后一只牛的编号是确定的,然后不断进行区间更新,直到找到某个空位前方恰好有n个空位. 这题跟某道排队的题思 ...
- Android--Intent的使用
1.Activity之间的切换通过Intent来完成. 1)清单文件,配置好Activity,所有Activity都需要在该文件中配置. <?xml version="1.0" ...
- Altium designer 原理图库快速创建
Altium designer 原理图库快速创建,原来都没发现用这个功能,最近查了一下很好用,就是通过Excel编写管脚名称再直接导入就可以了,很方便的. 1.首先在Excel创建填好对应管脚名称. ...
- Win8系统 Python安装 - 入门
原文:http://www.blogbus.com/hx1987-logs/271955446.html 安装python (1)下载python安装包,下载网站https://www.python. ...
- 在Ubuntu Server14.04上编译Android6.0源码
此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...