POJ 2503 qsort+bsearch

POJ 2503 qsort+bsearch

题意很简单 就是给一个最多有100000对单词的英语和外语的字典 然后给你一个词 要求翻译
我开始受刚作的一个题的影响 建了一个树 然后查找 不过超时了 应该是建树的开销比较大吧
后来用的是排序然后二分查找 200+ms就过了 还是比较快的
cmp函数参考了http://185229677.itpub.net/
在此表示感谢
代码贴出来 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct dict
{
    char english[11];
    char foreign[11];
}a[100001];

int mycmp(const void * aa,const void *b)
{
    return strcmp(((dict*)aa)->foreign,((dict*)b)->foreign);
}

int cmp(const void* aa,const void* b)
{
    return strcmp((char*)aa,((dict*)b)->foreign);
}

int main()
{
    char line[30],query[11];
    int i=0,j,k;
    while(gets(line))
    {
        if(!strcmp(line,"")) break;
        k=strlen(line);
        for(j=0;j<k;j++)
        {
            if(line[j]==' ')
            {
                line[j]='\0';
                break;
            }
        }
        strcpy(a[++i].english,line);
        strcpy(a[i].foreign,line+j+1);
    }

    qsort(a+1,i,sizeof(dict),mycmp);

    while(gets(query))
    {
        dict* f=(dict *)bsearch(query,a+1,i,sizeof(dict),cmp);
        if(f) printf("%s\n",f->english);
        else puts("eh");
    }
}


你可能感兴趣的:(POJ 2503 qsort+bsearch)