poj2503 哈希
这题目主要是难在字符串处理这块。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define mod 999983
struct node{
char str[+];
char res[+];
node *next;
}p[mod];
int sign[mod];
void hash(char str[],char res[]){
int i,l=strlen(str);
int key=;
for(i=;i<l;++i) key=(key+str[i]*str[i])%mod;
if(sign[key]==){
strcpy( p[key].str , str );
strcpy( p[key].res , res );
p[key].next=NULL;
sign[key]=;
} else if( sign[key]== ){
node *op=&p[key];
while(op->next!=NULL)
op=op->next;
node *tmp=(node *)malloc(sizeof(node));
strcpy( tmp->str,str );
strcpy( tmp->res,res );
tmp->next=NULL;
op->next=tmp;
}
return ;
}
node *find_hash(char str[]){
int i,l=strlen(str);
int key=;
for(i=;i<l;++i) key=(key+str[i]*str[i])%mod;
if(sign[key]==) return NULL;
else if(sign[key]==){
// printf("here!\n");
node *op=&p[key];
while(){
if(strcmp(str,op->str)==)
return op;
if(op->next==NULL) break;
op=op->next;
}
}
return NULL;
} int change(){
char str[+];
int l,i,j;
gets(str);
if(str[]=='\0') return ;
l=strlen(str); char str1[+],str2[+];
str2[]=str[];
for(i=;i<l;++i){
if(str[i]==' '){
break;
}
str2[i]=str[i];
}
str2[i]='\0';
i++;
str1[]=str[i++];
for(j=;i<l;++i,++j){
str1[j]=str[i];
}
str1[j]='\0';
if(strlen(str1)>) return ;
hash(str1,str2);
//printf("%s,%s\n",str1,str2);
return ; }
int main(){
char str[+];
memset(sign,,sizeof());
while(change()!=);
while(~scanf("%s",str)){
if(find_hash(str)==NULL) printf("eh\n");
else
printf("%s\n",find_hash(str)->res);
}
return ;
}
poj2503 哈希的更多相关文章
- [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 ...
- minHash最小哈希原理
minHash最小哈希原理 收藏 初雪之音 发表于 9个月前 阅读 208 收藏 9 点赞 1 评论 0 摘要: 在数据挖掘中,一个最基本的问题就是比较两个集合的相似度.通常通过遍历这两个集合中的所有 ...
随机推荐
- python(14)类,方法,对象,实例
类: 简单来说就是一个函数的集合,在这个集合里面你定义了很多个函数: 方法:其实就是你定义的这些函数. 对象:简单来说就是自身具有多个属性(也可以说是子变量)的变量而已. 在下面的例子中class P ...
- 转-Activity之间数据传递之Intent数据传递
Intent意图 可用于Activity之间的数据传递,一般可分为下面两种情况,从当前Activity传递到目标Activity后有无返回值: 1.传递后无返回值的情况: 1 2 3 4 5 6 7 ...
- java中treemap和treeset实现(红黑树)
java中treemap和treeset实现(红黑树) TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点. TreeSet 和 Tre ...
- ArrayList,Vector线程安全性测试
import java.util.ArrayList; import java.util.List; //实现Runnable接口的线程 public class HelloThread implem ...
- 配置sql server 2000以允许远程访问 及 连接中的四个最常见错误
地址:http://www.cnblogs.com/JoshuaDreaming/archive/2010/12/01/1893242.html 配置sql server 2000以允许远程访问适合故 ...
- 无法创建spool文件
是因为没有用管理员运行CMD,并且数据库不需要使用超级管理员登录.
- 97、进入ScrollView根布局页面,直接跳到页面底部,不能显示顶部内容
API使用:http://www.cnblogs.com/over140/archive/2011/01/27/1945964.html 以ScrollView为根的部局,不能从顶部显示其包含的页面内 ...
- [AIR] Screen 的应用
Screen 类提供此应用程序的可用显示屏幕的相关信息. 屏幕是位于可能更大的“虚拟桌面”内的独立桌面区域.虚拟桌面的原点是操作系统指定的主屏幕的左上角.因此,个别显示屏幕范围的坐标可能是负数.虚拟桌 ...
- MSDN知识库_c#关键字_static
Static 是C#会用到的关键字,可以用来修饰类.字段.方法.属性.运算符.事件和构造函数.今天在多线程中被静态成员不小心被撞了一下,因此将MSDN的内容整理转下来 一)静态类 Static ...
- SQL查询数据库是否存在
在实际工作中会遇到通过SQL查询数据库是否存在的情况,下面一些语句可以提供一些帮助,本文的语句是在SQL08R2中测试的 1,查询当前数据库服务器所有数据库 select * From master ...