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

1253人阅读 评论(0)

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;
}


0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：171536次
• 积分：3561
• 等级：
• 排名：第9231名
• 原创：191篇
• 转载：5篇
• 译文：0篇
• 评论：14条
阅读排行
评论排行
最新评论
0