博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-2503 Babelfish Hash表
阅读量:4982 次
发布时间:2019-06-12

本文共 1525 字,大约阅读时间需要 5 分钟。

这题用hash表做有点无病呻吟了,因为用map更快更简单。

把字符串按每一位乘以相应的位置,再进行hash操作。

这题还做的时候还遇到一个问题,在进行字符串复制的时候,由于直接sizeof(in)由于in在这个函数里面覆盖了全局的in所以in是一个指针变量,所以并不是15而是4,每次只赋值4个字节,肯定是错了点。

代码如下:

#include 
#include
#include
#define MOD 2000003using namespace std;char s[50], in[15], out[15];int head[2000003], idx;struct Node{ char w[15], t[15]; int next;}e[1000005];void Hash(char *in, char *out){ int key = 0; int length = strlen(in); for (int i = 0; i < length; ++i) { key += in[i] * (i+1); } key %= MOD; ++idx; strcpy(e[idx].w, in); strcpy(e[idx].t, out); e[idx].next = head[key]; head[key] = idx;}int find(char *in){ int length = strlen(in), key = 0; for (int i = 0; i < length; ++i) { key += in[i] * (i+1); } key %= MOD; for (int i = head[key]; i != -1; i = e[i].next) { if (!strcmp(in, e[i].w)) { return i; } } return -1;}int main(){ int ans; memset(head, 0xff, sizeof (head)); idx = -1; while (gets(s)) { int length = strlen(s); if (length != 0) { sscanf(s, "%s %s", out, in); Hash(in, out); } else { while (gets(s)) { ans = find(s); if (ans == -1) { puts("eh"); } else { printf("%s\n", e[ans].t); } } } } return 0;}

转载于:https://www.cnblogs.com/Lyush/archive/2012/07/12/2587852.html

你可能感兴趣的文章
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
Fireworks基本使用
查看>>
Java基础常见英语词汇
查看>>
UINavigationController的视图层理关系
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
php PDO (转载)
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
宏定义
查看>>
笔记:git基本操作
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
python第六篇文件处理类型
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>