题目大意:
伤心中······
给你个字典,就是一个字符串对应一个外国话字符串,最多100000条。然后就是要查询最多100000条字符串分别查到它们对应的外国话字符串。(每个字符串长度都超过10)
哈希表就是可以快速查找的,然后网上看到别人用map,瞬间感觉好简单好简单。。。。
#include<iostream>
#include<map>
using namespace std;
#include<string>
map<string,string>mp;
int main()
{
char a[30],b[15],c[15];
while(gets(a)&&a[0]!='\0')
{
sscanf(a,"%s %s",&b,&c);
mp[c]=b;
}
char s[15];
while(gets(s)&&s[0]!='\0')
{
if(mp[s][0]=='\0')cout<<"eh\n";
else cout<<mp[s]<<endl;
}
return 0;
}
下面是我各种改之后好不容易过的代码: #include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 105000
#define MOD 100000
using namespace std;
char a[N][15]={0};
char b[N][15]={0};
int hash[N]={0};
int next[N]={0};
int n=1;
bool same(char x[],char y[])
{
int i=0;
while(x[i]!='\0'&&y[i]!='\0')
{
if(x[i]!=y[i])return 0;
i++;
}
return 1;
}
int main()
{
char l[25]={0};
while(gets(l)&&l[0]!='\0')
{
sscanf(l,"%s %s",&a[n],&b[n]);
int x=0;
int i=0;
while(b[n][i]!='\0')
{
x=x+b[n][i];
i++;
}
x=x%MOD+1;
next[n]=hash[x];
hash[x]=n;
n++;
}
//ceshi();
//ceshi2();
char x[15]={0};
while(gets(x)&&x[0]!='\0')
{
int s=0;int i=0;
while(x[i]!='\0')
{
s=s+x[i];
i++;
}
s=s%MOD+1;
s=hash[s];
bool flag=0;
while(s)
{
//cout<<"@";
if(same(b[s],x))
{
flag=1;
printf("%s\n",a[s]);
break;
}
s=next[s];
}
if(flag==0)printf("eh\n");
}
}
伤心中······