problem 1109

Language of FatMouse 

问题十分简单,关键在于数据量大直接循环做会超时。这里采用先排序再二分搜索的方法。排序用qsort(),搜索用bsearch()(不知道怎么用的看这里 c语言中几个很有用的函数)。

还可以用树来做,建一个二十六叉树,这样时间和空间效率都将提升不少,不过比排序做要麻烦。

Accepted1109C00:00.563628K

#include<stdio.h>
#include<string
.h>
#include
<stdlib.h>
struct  s
{
    
char a[11
];
    
char b[11
];
}d[
100008
];
char w[100008][11
];
int cmp(const void* a,const void*
 b)
{
    
return strcmp((*(struct s*)a).b,(*(struct s*
)b).b);
}
int cmp1(const void* a,const void*
 b)
{
    
return strcmp((char *)a,(*(struct s*
)b).b);
}
void
 solve()
{
    
char temp[22
];
    
int
 cnt1,cnt2,k;
    cnt1 
= cnt2 = k = 0
;
    
while(1
)
    {
        
int i = 0,j = 0
;
        gets(temp);
        
if(temp[0== 0
)
            
break
;
        
while(temp[i] != ' '
)
            d[cnt1].a[i] 
= temp[i++
];
        
while(temp[++i] != 0
)
            d[cnt1].b[j
++=
 temp[i]; 
        cnt1
++
;
    }
    
while(scanf("%s",w[cnt2++]) !=
 EOF);
    cnt2
--
;
    qsort(d,cnt1,
sizeof(d[0
]),cmp);
    
for(k = 0; k < cnt2; k++
)
    {
        
struct s*
 t;
        t 
= bsearch(w[k],d,cnt1,sizeof(d[0
]),cmp1);
        t 
== NULL ? puts("eh") : puts(t->
a);
    }
}
void
 main()
{
#ifndef ONLINE_JUDGE
    freopen(
"test.txt","r",stdin);
#endif
    solve();
#ifndef ONLINE_JUDGE
    fclose(stdin);
#endif
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值