poj 2503

***先对给的词,按首字母a-z排序,再二分查找***

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>

using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
#define N 100005

struct node
{
    char s1[12];
    char s2[12];
}stu[N];

int cmp(node a, node b)
{
    return strcmp(a.s2, b.s2)<0;
}

void f(char s[], int n)
{
    int l, r, mid, flag=0;
    l=0;
    r=n-1;
    mid=(l+r)/2;

    while(l<=r)
    {
        if(strcmp(s, stu[mid].s2)>0)
        {
            l=mid+1;
        }
        else if(strcmp(s, stu[mid].s2)<0)
        {
            r=mid-1;
        }
        else
        {
            printf("%s\n", stu[mid].s1);
            flag=1;
            return ;
        }
        mid=(l+r)/2;
    }
    if(!flag)
        printf("eh\n");
    return ;
}

int main()
{
    char ch, str[12];
    int i;
    memset(stu, 0, sizeof(stu));
    for(i=0; ; i++)
    {
        scanf("%s%c", stu[i].s1, &ch);
        if(ch==' ')
            scanf("%s", stu[i].s2);
        else
            break;
    }
    sort(stu, stu+i, cmp);

    f(stu[i].s1, i);

    while(~scanf("%s", str))
    {
        f(str, i);
    }
    return 0;
}

 

posted on 2016-07-28 17:29  南风丶丶  阅读(105)  评论(0编辑  收藏  举报