各种方式解这道题!!

利用map 超时了

#include <iostream>
#include <string>
#include <map>
using namespace std;
string s;
map<string,int> in;
int main()
{
in.clear();
int i=,num=;
char out[][];
char a[],b[],c[];
char ch=getchar();
while(ch!='\n')
{
int j=;
while(ch>='a' && ch<='z')
{
a[j++]=ch;
ch=getchar();
}
a[j]='\0'; while(ch>'z' || ch<'a')
ch=getchar(); j=;
while(ch>='a' && ch<='z')
{
b[j++]=ch;
ch=getchar();
}
b[j]='\0';//每个数组的结束符 num++;
s=b;
in[s]=num;
strcpy(out[num],a);
//while(ch!='\n') ch=getchar();
ch=getchar();
i++; } while(scanf("%s",c)!=EOF)
{
s=c;
i=in[s];
if(i>)
printf("%s\n",out[i]);
else
printf("eh\n");
}
system("pause");
return ;
}

二分查找

#include<iostream>
using namespace std; struct pp
{
char a[],b[];
}p[]; int cmp(void const *c,void const *d)
{
return strcmp(((pp *)c)->b,((pp *)d)->b);
} int binarysearch(char s[],int k)
{
int low=,hight=k+,mid;
while(low<=hight)
{
mid=(low+hight)/;
if(strcmp(p[mid].b,s)==) return mid;
else if(strcmp(p[mid].b,s)<) low=mid+;
else hight=mid-;
}
return -;
} int main()
{
char ch,s[];
int i,k,j,t;
ch=getchar();i=;p[].a[]=ch;k=-;
while()
{
k++;
while(ch!=' ') { p[k].a[i++]=ch; ch=getchar(); }
p[k].a[++i]='\0';i=;
ch=getchar();j=;
while(ch!='\n') { p[k].b[j++]=ch;ch=getchar(); }
p[k].b[j]='\0';j=;
ch=getchar();
if(ch=='\n')break;
} qsort(p,k+,sizeof(p[]),cmp); while(scanf("%s",s)!=EOF)
{
t=binarysearch(s,k);
if(t>=) printf("%s\n",p[t].a);
else printf("eh\n");
}
return ;
}

hash表

#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
const int M=;//Hash Table的槽数,取质数对解决冲突较为有效
char English[][],Foreign[][];
struct node//Hash Table中的元素类型
{
int num;//记录英语数组中的标号
struct node *next;
}*link[M]={NULL};//槽中存放一个链表头指针(开散列解决冲突)
int ELFlash(char *key)// UNIX 系统ELF字符串散列函数,对字符串的处理一般使用此函数
{
unsigned long h=;
while (*key)
{
h=(h<<)+*key++;
unsigned long g=h & 0xf0000000L;
if (g) h^=g>>;
h &= ~g;
}
return h%M;
}
int main()
{
char st[];
int i,k;
node *p;
i=;
while (gets(st))
{
if (sscanf(st,"%s %s",English[i],Foreign[i])!=) break;//判断读入词典是否完毕
k=ELFlash(Foreign[i]);//计算Hash函数
p=new node;//建立Hash Table
p->num=i;
p->next=link[k];
link[k]=p;
i++;
}
while (gets(st)!=NULL)
{
k=ELFlash(st);
p=link[k];
while (p!=NULL)//在Hash Table中查找单词
{
if (strcmp(st,Foreign[p->num])==) break;//若找到则推出
p=p->next;
}
if (p==NULL) printf("eh\n");//没有找到的情况
else printf("%s\n",English[p->num]);
}
return ;
}

trie

#include<iostream>
using namespace std;
struct node{
node *child[];
char key[];
bool d;
}*root;
char s1[],s2[],s3[];
void trie(){
root=new node;
for(int i=;i<;i++) root->child[i]=NULL;
root->d=false;
}
void insert(){
node *r=root,*p;
int len=strlen(s3);
for(int i=;i<len;i++){
if(r->child[s3[i]-'a']==NULL){
p=new node; p->d=false;
for(int j=;j<;j++) p->child[j]=NULL;
r->child[s3[i]-'a']=p;
}
r=r->child[s3[i]-'a'];
if(i==len-){
r->d=true;
strcpy(r->key,s2);
}
}
}
bool search(){
node *r=root;
int len=strlen(s1);
for(int i=;i<len;i++){
r=r->child[s1[i]-'a'];
if(r==NULL) return false;
if(i==len- && r->d){
strcpy(s2,r->key);
return true;
}
}
return false;
}
int main()
{
int i,j,k,len;
trie();
while(true){
gets(s1); if(strcmp(s1,"")==) break;
for(i=;s1[i]!=' ';i++) s2[i]=s1[i];
for(i=i+, j=, len=strlen(s1);i<len;i++,j++) s3[j]=s1[i];
insert();
}
while(scanf("%s",s1)!=EOF){
if(search()) printf("%s\n",s2);
else printf("eh\n"); }
system("pause");
return ;
}

再来个通过的map..

#include <stdio.h>
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
// freopen("in.txt","r",stdin);
string s;
char ss[],s1[],s2[];
map <string,string> m;
map <string,string> ::iterator p;
while (gets(ss)) //建立map
{ s=ss;
if (s[]<'a' || s[]>'z' ) break;
else
{ sscanf(s.c_str(),"%s %s",s1,s2);
m[s2]=s1;
}
}
while (gets(ss)) //从map查询
{
s=ss;
if (s[]<'a' || s[]>'z' ) break;
p=m.find(s);
if ( p!=m.end())
cout << p->second <<endl;
else printf("eh\n");
}
return ;
}

【一题多解】 map 二分 hash trie poj 2503的更多相关文章

  1. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容:(1)利用python中的dict实现Trie:(2) ...

  2. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))

    5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 107  Solved: 57[Sub ...

  3. BZOJ4698: Sdoi2008 Sandy的卡片(二分 hash)

    题意 题目链接 Sol 用什么后缀数组啊 直接差分之后 二分+hash找最长公共子串就赢了啊... 时间复杂度:\(O(nlogn)\)(不过我写的是两个log..反正也能过) // luogu-ju ...

  4. LOJ#111. 后缀排序(二分 hash)

    题意 给出一个字符串,求出排名为$i$个字符串在原串中的开始位置 Sol 纪念一下这伟大的时刻qwq. 我用二分+hash把这题水过去了qwq. #include<cstdio> #inc ...

  5. luogu2312 解方程 (数论,hash)

    luogu2312 解方程 (数论,hash) 第一次外出学习讲过的题目,然后被讲课人的一番话惊呆了. 这个题,我想着当年全国只有十几个满分.....然后他又说了句我考场A这道题时,用了5个模数 确实 ...

  6. 短文评估【安徽省选2003】- hash / trie

    题目分析 其实是hash/trie裸题,讲一下hash的做法:如果其小写状态是第一次出现则加入集合,同时将小写状态加入小写单词的hash表,最后查时查出出现次数即可. code #include< ...

  7. BZOJ 1014: [JSOI2008]火星人prefix [splay 二分+hash] 【未完】

    1014: [JSOI2008]火星人prefix Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6243  Solved: 2007[Submit] ...

  8. SQLServer 常见SQL笔试题之语句操作题详解

    SqlServer 常见SQL笔试题之语句操作题详解 by:授客 QQ:1033553122 测试数据库 CREATE DATABASE handWriting ON PRIMARY ( name = ...

  9. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

随机推荐

  1. 2016年团体程序设计天梯赛-决赛 L1-6. 一帮一(15)

    “一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中, ...

  2. web工程师经常遇到的专业术语(待补充)

    接口(API) SEO指的是将从各个方面对网站内容进行优化,方便搜索引擎检索.搜索引擎工作的原理就是对网站内容进行抓取,然后解析. 白帽SEO:合理的对网站内容进行优化进而增加搜索引擎友好度. 黑帽S ...

  3. img 鼠标滑上后图片放大,滑下后图片复原

    <style type="text/css">img{ -webkit-transition: ease .2s; transition: ease .2s; -web ...

  4. git三个区域详解

    一.可以将git简单的分为三个区域    1.工作区(working directory)    2.暂缓区(stage index)    3.历史记录区(history) 二.三个区域关系:工作区 ...

  5. Docker 安装完启动服务报错

    [root@lh- ~]# docker images Cannot connect to the Docker daemon. Is the docker daemon running on thi ...

  6. Linux中kettle启动spoon.sh遇到的问题

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAccAAAAYCAIAAAAAgaGrAAAE1klEQVR4nO1b2ZWrMAylLgpyPa7Gzb

  7. ESFramework 4.0 进阶(04)-- 驱动力:通信引擎(下)

    在ESFramework 4.0 进阶(03)-- 驱动力:通信引擎(上)一文中,我们对ESFramework提供的每一个通信引擎的接口都做了详细了说明,这篇文章我们将继续探讨这些接口的实现类 -- ...

  8. 修改select选中项

    /** * 设置select选中 * @param selectId select的id值 * @param checkValue 选中option的值 */ function setSelectCh ...

  9. git提交失败

    git push "提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支."的解决办法 本地已存在项目,需要先获取远端更新并与本地合并,再git push具体操作如下: ...

  10. 2016-11-10linux

    ---恢复内容开始---  新建用户natasha,uid为88,gid为6,备注信息为"master"   修改natasha用户的家目录为/Natasha    查看用户信息配 ...