百炼 2804 词典

2804:词典



总时间限制: 3000ms 内存限制: 65536kB


描述
你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运
的是,你有一本词典可以帮助你。

输入
首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行。
每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔
开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,
然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包
括一个外语单词。输入中出现单词只包括小写字母,而且长度不会超过10。

输出
在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个
外语单词不在词典中,就把这个单词翻译成“eh”。
样例输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay


样例输出
cat
eh
loops
比较简单的检索题,主要建立一个词典的结构体,然后建立完毕后用sort对外
文进行升序排序,查找时直接进行二分查找,速度很快.值得注意的是构造词典
时,词典的输入是以一个回车结束,所以可以使用 getchar() 函数来获取输
入的第一个字符,如果是'\n',说明词典的输入停止.然后再输入待查找的外
文.
/*
 内存: 7688kB
 时间: 129ms
 语言: G++
 */
#include <iostream>
#include <cstring>
#include <string>
#include <stdio.h>
#include <algorithm>
using namespace std;

int d_num, flag, res;
char temp;
char _find[12];

struct dictionary
{
    char Eng[12];
    char For[12];
}dic[100100];

bool cmp(dictionary a,dictionary b)
{
    return strcmp(a.For,b.For)<0;
}

void dfs(int left,int right,char *des)
{
    int mid = (left+right)/2;
    if(left <= right)
    {
        if(strcmp(dic[mid].For,des) < 0)//在右侧区域
        {
            return dfs(mid+1,right,des);
        }
        else if(strcmp(dic[mid].For,des) > 0)
        {
            return dfs(left,mid-1,des);
        }
        else
        {
            flag = 1;
            res = mid;
            return;
        }
    }
    return;
}

int main()
{
    while((temp=getchar()) != '\n')
    {
        dic[d_num].Eng[0] = temp;
        scanf("%s%s",dic[d_num].Eng+1,dic[d_num].For);
        d_num++;
        getchar();//行尾回车
    }
    sort(dic,dic+d_num,cmp);//词典按外文排序
    while(scanf("%s",&_find) != EOF)
    {
        flag = 0;
        dfs(0,d_num-1,_find);
        if(flag == 0)
            printf("eh\n");
        else
        {
            printf("%s\n",dic[res].Eng);
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值