poj 2503 hash
2015-10-24 13:19
369 查看
一道练模板的题
用stl就可以直接过,1500+ms
自己写hash搜索,300+ms
#include<iostream>
#include<map>
#include <string>
#include<algorithm>
#include<fstream>
#include<cmath>
using namespace std;
#define lch(i) ((i)<<1)
#define rch(i) ((i)<<1|1)
#define sqr(i) ((i)*(i))
#define pii pair<int,int>
#define mp make_pair
#define FOR(i,b,e) for(int i=b;i<=e;i++)
#define FORE(i,b,e) for(int i=b;i>=e;i--)
#define ms(a) memset(a,0,sizeof(a))
const int maxnum =10007;
const int key = 177;
int hashn[maxnum];
struct node
{
unsigned long long val;
int next;
char dic[11];
}table[100001];
int p;
void init(){
FOR(i,1,maxnum-1)hashn[i]=-1;
p=0;
}
void inserthash(unsigned long long tag,char end[11]){
int num = tag%maxnum;
table[p].next=hashn[num];
table[p].val = tag;
strcpy(table[p].dic,end);
hashn[num]=p++;
}
int findhash(unsigned long long tag){
int num = tag%maxnum;
for(int i =hashn[num];i!=-1;i=table[i].next){
if(table[i].val==tag)
return i;
}
return -1;
}
int main()
{
/*fstream fin("G:/1.txt");*/
init();
while(1){//dic
char tmp[11],fore[11];
tmp[0]=getchar();
if(tmp[0]=='\n')break;
FOR(i,1,10){
tmp[i]=getchar();
if(tmp[i]==' '){
tmp[i]='\0';
break;
}
}
scanf("%s",fore);
getchar();
int len = strlen(fore);
unsigned long long tag=0;
FOR(i,0,len-1){
tag = tag*26+fore[i]-'a';
}
inserthash(tag,tmp);
}
char tmp[11];
while(scanf("%s",tmp)!=EOF){
int len = strlen(tmp);
unsigned long long tag=0;
FOR(i,0,len-1){
tag = tag*26+tmp[i]-'a';
}
int num = findhash(tag);
if(num!=-1)
printf("%s\n",table[num].dic);
else
printf("eh\n");
}
}
用stl就可以直接过,1500+ms
自己写hash搜索,300+ms
#include<iostream>
#include<map>
#include <string>
#include<algorithm>
#include<fstream>
#include<cmath>
using namespace std;
#define lch(i) ((i)<<1)
#define rch(i) ((i)<<1|1)
#define sqr(i) ((i)*(i))
#define pii pair<int,int>
#define mp make_pair
#define FOR(i,b,e) for(int i=b;i<=e;i++)
#define FORE(i,b,e) for(int i=b;i>=e;i--)
#define ms(a) memset(a,0,sizeof(a))
const int maxnum =10007;
const int key = 177;
int hashn[maxnum];
struct node
{
unsigned long long val;
int next;
char dic[11];
}table[100001];
int p;
void init(){
FOR(i,1,maxnum-1)hashn[i]=-1;
p=0;
}
void inserthash(unsigned long long tag,char end[11]){
int num = tag%maxnum;
table[p].next=hashn[num];
table[p].val = tag;
strcpy(table[p].dic,end);
hashn[num]=p++;
}
int findhash(unsigned long long tag){
int num = tag%maxnum;
for(int i =hashn[num];i!=-1;i=table[i].next){
if(table[i].val==tag)
return i;
}
return -1;
}
int main()
{
/*fstream fin("G:/1.txt");*/
init();
while(1){//dic
char tmp[11],fore[11];
tmp[0]=getchar();
if(tmp[0]=='\n')break;
FOR(i,1,10){
tmp[i]=getchar();
if(tmp[i]==' '){
tmp[i]='\0';
break;
}
}
scanf("%s",fore);
getchar();
int len = strlen(fore);
unsigned long long tag=0;
FOR(i,0,len-1){
tag = tag*26+fore[i]-'a';
}
inserthash(tag,tmp);
}
char tmp[11];
while(scanf("%s",tmp)!=EOF){
int len = strlen(tmp);
unsigned long long tag=0;
FOR(i,0,len-1){
tag = tag*26+tmp[i]-'a';
}
int num = findhash(tag);
if(num!=-1)
printf("%s\n",table[num].dic);
else
printf("eh\n");
}
}
相关文章推荐
- c语言实现hashmap(转载)
- Ruby中Hash的11个问题解答
- Ruby简明教程之数组和Hash介绍
- 在C#中生成与PHP一样的MD5 Hash Code的方法
- js中hash和ico的关联分析
- Javascript SHA-1:Secure Hash Algorithm
- 理解php Hash函数,增强密码安全
- PHP利用hash冲突漏洞进行DDoS攻击的方法分析
- PowerShell中定义哈希散列(Hash)和调用例子
- Redis String 类型和 Hash 类型学习笔记与总结
- php操作redis中的hash和zset类型数据的方法和代码例子
- Perl 哈希Hash用法之入门教程
- perl哈希hash的常见用法介绍
- php自定义hash函数实例
- php对文件进行hash运算的方法
- php常用hash加密函数
- PHP Hash算法:Times33算法代码实例
- php的hash算法介绍
- memcache一致性hash的php实现方法
- Mysql中的Btree与Hash索引比较