# HLG 1022 Jiaozhu and SC -（二分查找）或（哈希函数处理字符串）

Description：

1.使用人族的选手总是能战胜虫族选手
2.使用虫族的选手总是能战胜神族选手
3.使用神族的选手总是能战胜人族选手
4.使用相同种族的选手对战总是产生平局

Input：

Output：

Sample Input：

4 4
JiaoZhu T
Jaedong Z
LMJ Z
Jaedong LMJ
JiaoZhu LMJ

Sample output：

End in a draw!
End in a draw!
XiaoM Wins!
TianT Wins!

#include <cstring>
#include <cstdio>
#include <iostream>
using namespace std;

typedef struct Competitor_ {
char name[51];
}Competitor;

Competitor cp[10005];

int cmp(const void *a, const void *b) {
Competitor *p1=(Competitor*)a;
Competitor *p2=(Competitor*)b;
return strcmp(p1->name, p2->name);
}

int binarySearch(const Competitor cp[], int left, int right, const char key_name[]) {
right--;
while (left <= right) {
int mid = left + (right - left) / 2;
if (strcmp(cp[mid].name, key_name) > 0) {
right = mid - 1;
}else if(strcmp(cp[mid].name, key_name) < 0) {
left = mid + 1;
}else {
return mid;
}
}
}

int main()
{
int n, m;
char name1[55], name2[55];
while (scanf("%d%d", &n, &m) != EOF) {
for (int i=0; i<n; i++) {
}
qsort(cp, n, sizeof(cp[0]), cmp);
for (int i=0; i<m; i++) {
scanf("%s%s", name1, name2);
int c1 = binarySearch(cp, 0, n, name1);
int c2 = binarySearch(cp, 0, n, name2);
printf("End in a draw!\n");
}
printf("XiaoM Wins!\n");
}
printf("TianT Wins!\n");
}
}
}
return 0;
}

规律：利用哈希函数将字符串映射到数组中，利用下标实现快速查找。

#include<string.h>

unsigned int SDBMHash(char *str)
{
unsigned int hash = 0;
while (*str) {
hash = (*str++) + (hash << 6) + (hash << 16) - hash;
}
return (hash & 0x7FFFFFFF);
}

int main()
{
int a[100000];
int len, len1, len2, x, y, m, n, z;
char b[11], d[11], c[2];

scanf("%d%d",&n, &m);
for(int i=0; i<n; i++) {
scanf("%s%s", b, c);
z = SDBMHash(b)%100000;
if(c[0]=='T')
a[z] = 1;
else if(c[0]=='Z')
a[z] = 2;
else
a[z] = 3;
}
for(int i=0; i<m; i++) {
x=0;y=0;
scanf("%s%s",b,d);
x = SDBMHash(b)%100000;
y = SDBMHash(d)%100000;
if(a[x]==a[y])
printf("End in a draw!\n");
else if((a[x]==1&&a[y]==2)||(a[x]==2&&a[y]==3)||(a[x]==3&&a[y]==1))
printf("XiaoM Wins!\n");
else
printf("TianT Wins!\n");
}
return 0;
}


• 本文已收录于以下专栏：

## 用C语言实现常用的字符串哈希函数

• 2015年01月12日 09:43
• 4KB
• 下载

## 字符串哈希函数设计

• 2014年05月11日 11:36
• 1.32MB
• 下载

## murmur:更快更好的哈希函数（字符串转64位hash值）

unsigned long long MurmurHash64B ( const void * key, int len, unsigned int seed ) { const unsigned ...
• wisage
• 2011年12月27日 09:42
• 17588

## hdu4268 Alice and Bob（二维贪心的固定思想 STL的multiset的二分查找函数实现）

Link：http://acm.hdu.edu.cn/showproblem.php?pid=4268 Alice and Bob Time Limit: 10000/5000 M...

## 若干经典的字符串哈希函数

//  RS Hash Function  unsigned  int  RSHash( char   * str) {        unsigned  int  b  =   378551 ;  ...
• WINCOL
• 2011年01月13日 18:22
• 1922

## 10391 - Compound Words(***)字符串的哈希函数

/* 题意：一组单词，是否可以分解成两个单词 思路：可以进行重组（一种时间效率为n，但空间分配为n*n，一种时间效率为n*n，空间分配为n） 也可以进行分拆，效率为n*m，其中m为单词平均长度。 主...

举报原因： 您举报文章：HLG 1022 Jiaozhu and SC -（二分查找）或（哈希函数处理字符串） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)