ALDS1_4_C Dictionary(哈希)
来源:互联网 发布:ae cc mac 破解补丁 编辑:程序博客网 时间:2024/05/16 14:21
Discussion
Your task is to write a program of a simple dictionary which implements the following instructions:
insert str: insert a string str in to the dictionary
find str: if the distionary contains str, then print ‘yes’, otherwise print ‘no’
Input
In the first line n, the number of instructions is given. In the following n lines, n instructions are given in the above mentioned format.
Output
Print yes or no for each find instruction in a line.
Constraints
A string consists of ‘A’, ‘C’, ‘G’, or ‘T’
1 ≤ length of a string ≤ 12
n ≤ 1000000
Sample Input 1
5
insert A
insert T
insert C
find G
find A
Sample Output 1
no
yes
Sample Input 2
13
insert AAA
insert AAC
insert AGA
insert AGG
insert TTT
find AAA
find CCC
find CCC
insert CCC
find CCC
insert T
find TTT
find T
Sample Output 2
yes
no
no
yes
yes
yes
题意
实现一个简易的字典,能insert(插入) 和 find(查找)
思路
数据范围大,可能查询很多次,所以用HASH来储存,插入和查找的时间复杂度都是O(1)。
代码
#include<stdio.h>#include<string.h>const int L = 14;const int M = 1046527;char H[M][L]; /* Hash Table */int getChar(char ch){ if ( ch == 'A') return 1; else if ( ch == 'C') return 2; else if ( ch == 'G') return 3; else if ( ch == 'T') return 4;}/* convert a string into an integer value */long long getKey(char str[]){ long long sum = 0, p = 1, i; for ( i = 0; i < strlen(str); i++ ){ sum += p*(getChar(str[i])); p *= 5; } return sum;}int h1(int key){ return key % M; }int h2(int key){ return 1 + (key % (M-1)); }int find(char str[]){ long long key,i = 0; key = getKey(str); while(1) { int h = ( h1(key) + i*h2(key) ) % M; if(strcmp( H[h],str) == 0 ) return 1; else if(strlen(H[h]) == 0) return 0; i++; } return 0;}void insert(char str[]){ long long i = 0,key; key = getKey(str); while(1) { int h = ( h1(key) + i*h2(key) ) % M; if(strcmp(H[h],str) == 0 ) return ; else if(strlen(H[h]) == 0 ) { strcpy(H[h],str); return ; } i++; } return ;}int main(){ int i, n; char str[L], com[9]; for ( i = 0; i < M; i++ ) H[i][0] = '\0'; scanf("%d", &n); for ( i = 0; i < n; i++ ){ scanf(" %s %s", com, str); if ( com[0] == 'i' ){ insert(str); } else { if (find(str)){ printf("yes\n"); } else { printf("no\n"); } } } return 0;}
- ALDS1_4_C Dictionary(哈希)
- 第五章 ALDS1_4_C:Dictionary 散列表
- dictionary用法(1)
- Python字典(Dictionary)
- swift-字典(Dictionary)
- Swift-字典(Dictionary)
- python dictionary(字典)
- Dictionary
- dictionary
- Dictionary
- Dictionary
- dictionary
- Dictionary
- Dictionary
- dictionary
- Dictionary
- Dictionary
- Dictionary
- $.ajax
- 文章标题
- android各版本差异--后期慢慢补充
- 排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
- Laravel : InvalidArgumentException in Carbon.php line 425: Data missing
- ALDS1_4_C Dictionary(哈希)
- CentOS5配置修改静态IP地址
- 数据结构入门学习系列-1(基本数据结构)
- 如何跟踪Apache Spark官方社区?
- JMeter HTTP信息头管理器
- 深入理解程序从编译到运行
- 关于透明度不兼容问题
- better-scroll api
- javascript中静态方法、实例方法、内部方法和原型的一点见解