uva10282
2016-05-12 18:53
204 查看
题意:
某地语言与a君母语不同,现给出对应关系,求这个语言多对应的母语,没有则输出eh
思路:
用到了隐士图搜索,给每个某地语言分配标号
这里用到了一个非常高效的哈希函数:
maxn = 1000003
代码:
某地语言与a君母语不同,现给出对应关系,求这个语言多对应的母语,没有则输出eh
思路:
用到了隐士图搜索,给每个某地语言分配标号
这里用到了一个非常高效的哈希函数:
maxn = 1000003
int Hash(char* str) { int seed = 131; unsigned int v = 0; while(*str) { v = v * seed + (*str++); } return (v & 0x7FFFFFFF) % maxn; }那么用链表把同标号的某地语言穿起来,这个查找是否与输入的相同即可
代码:
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn = 100005; char m[maxn][30], y[maxn][30]; char Model[maxn][60]; int head[maxn]; int Next[maxn]; int Hash(char* t) { int seed = 131; unsigned int s = 0; while(*t) { s = s*seed+(*t++); } return s&(0x7FFFFFFFF)%maxn; } void build(int n) { int h = Hash(y ); Next = head[h]; head[h] = n; } void find(char *s) { int h = Hash(s); int u = head[h]; while(u) { if(strcmp(s, y[u]) == 0) { printf("%s\n", m[u]); return; } u = Next[u]; } printf("eh\n"); } int main() { int i = 1;//head[x] = 0为空头结点 while(gets(Model[i])) { if(Model[i][0] == '\0') break; sscanf(Model[i], "%s%s", m[i], y[i]); build(i); i++; } char tmp[30]; while(gets(tmp)) find(tmp); return 0; }
相关文章推荐
- xtrabackup备份脚本
- python pickle模块
- 笔试题53. LeetCode OJ (40)
- 1-6 Tower of Hanoi
- 【译】Java中的枚举
- [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列
- 也来看看hadoop的WordCount
- R语言 常见模型
- nodejs 建站
- Clustering by fast search and find of density peaks 小结
- 原生JS实现tab切换
- Linux下用curlftpfs挂载FTP服务器 [CentOS]
- NSDictionary
- AngularJS之开发组件的一些思路
- jq tab
- 财金视频:五招盘中底部掌握战机
- Arduino 高级教程 02:用 Visual Studio 2015 开发 Arduino 应用程序(一)
- angular-messages.js
- zabbix通过jmx监控tomcat
- CentOS7配置时间和CentOS6搭建局域网NTP