摘要:转自:http://www.cnblogs.com/qianxun/archive/2011/07/03/2096773.html1.Hash介绍 Hash这个在实现某些功能的经常会用到的数据结构,在java和c++ 里面都有相应的封装好的数据结构:C++ STL Map java 有HashMap TreeMap。计算理论中,没有Hash函数的说法,只有单向函数的说法。所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数据。用“人 类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来;而当给定结果的时候,很难计算出输入来,这就是单项函数。各种加密
阅读全文
摘要:哎~~简直是坑爹的setbuf(stdout,NULL),不理解这个函数的机理,结果为杭电贡献了N次的time limit exceed,其实这道题目还是非常简单的,了解了除法的机制以后,就很好做了,注意余数相同时,循环节开始View Code 1 /* 2 * Author:lonelycatcher 3 * problem:hdu 2522 4 * Type:Hash 5 */ 6 #include <iostream> 7 #include<stdio.h> 8 #include<string.h> 9 #include<cstdlib>1
阅读全文
摘要:这道题简化一些就是求输入相等的字符串的最大值,即最多有多少字符串相等,用map做的话相当简单,但是会超时,可能是用cin的原因,这里将字符串Hash到一个整数,然后就很简单了,注意这里有些地方需要注意的,即字符串前导零的处理!!View Code 1 /* 2 * Author:lonelycatcher 3 * problem:hdu 1800 4 * Type:字符串的Hash 5 */ 6 #include <iostream> 7 #include<limits.h> 8 #include<string.h> 9 #include<string
阅读全文
摘要:这道题目如果用一个四重循环的话应该会超时,可以将方程转换为一个等式,a*x1*x1+b*x2*x2=-(c*x3*x3+d*x4*x4);但是如何寻找适当x1,x2,x3,x4是这个等式成立呢,用Hash是一个不错的选择,将a*x1*x1+b*x2*x2映射到一个很大的数组(经过计算1000000即可),然后再对二重循环c*x3*x3+d*x4*x4的结果与相对应的Hash值相比较即可View Code 1 /* 2 * Author:lonelycatcher 3 * problem:hdu 1496 4 * Type:Hash 5 */ 6 #include <iostream>
阅读全文
摘要:树的同构问题,至今不知道什么叫做树的最小表示,参考了别人的代码:仅供自己参考。。Source CodeProblem:1635User:sunyanfeiMemory:748KTime:16MSLanguage:G++Result:AcceptedSource Code/* * problem:poj 1635 * Type:最小表示 */#include<iostream>#include<stdio.h>#include<string>#include<string.h>#include<algorithm>using names
阅读全文
摘要:Problem:1200User:sunyanfeiMemory:30904KTime:63MSLanguage:G++Result:AcceptedSource Code/* * Author:lonelycatcher * Problem:poj 1200 crazy search * Type:Hash */#include <iostream>#include<string>#include<string.h>#include<stdio.h>using namespace std;char str[1000000];int hash[1
阅读全文