成长轨迹46 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2804:词典】


http://poj.grids.cn/practice/2804

因为数据比较大,很容易tle
要ac起码就得将二分查找使出来
先做快排,然后进行二分查找
二分查找似乎也有stl函数:char p *= (dic *)bsearch(buf, dict, 100050 , sizeof(dict[0]), b_cmp); 

【Time Limit Exceeded代码】
//因为数据比较大,很容易tle

 1 //因为数据比较大,很容易tle
2 #include <stdio.h>
3 #include <string.h>
4 #include <ctype.h>
5 #include <cmath>
6
7 char buf[100050][12];
8 char en[100050][12],fr[100050][12];
9
10 int main()
11 {
12 int i;
13 for(i=0;;i++)
14 {
15 memset(en[i],0,sizeof(en[i]));
16 memset(fr[i],0,sizeof(fr[i]));
17 en[i][0]=getchar();
18 if(en[i][0]=='\n')
19 {
20 break;
21 }
22 for(int j=1;;j++)
23 {
24 en[i][j]=getchar();
25 if(en[i][j]==' ')
26 break;
27 }
28 scanf("%s",fr[i]);
29 getchar();
30 }
31 for(int k=0;scanf("%s",buf[k])!=EOF;k++)
32 {
33 int j;
34 for(j=0;j<i;j++)
35 {
36 if(strcmp(buf[k],fr[j])==0)
37 {
38 printf("%s\n",en[j]);
39 break;
40 }
41 }
42 if(j==i)
43 printf("eh\n");
44 }
45
46 return 0;}

 

【ac代码】

 1 //要ac起码就得将二分查找使出来
2 //先做快排,然后进行二分查找
3 //二分查找似乎也有stl函数:char p *= (dic *)bsearch(buf, dict, 100050 , sizeof(dict[0]), b_cmp);
4 //(变量是根据我的代码改的)
5 //b_cmp函数详细可以看看http://blog.csdn.net/pirage/article/details/6958752
6 #include <stdio.h>
7 #include <string.h>
8 #include <ctype.h>
9 #include <cmath>
10 #include <stdlib.h>
11
12 char buf[12];
13 struct dic
14 {
15 char en[12];
16 char fr[12];
17 }dict[100050];
18
19 int cmp(const void *a,const void *b)
20 {
21 return strcmp(((struct dic *)a)->fr,((struct dic *)b)->fr);
22 }
23
24 void mybsearch(char *s,int n)
25 {
26 int low=0;
27 int hig=n-1;
28 while(low<=hig)
29 {
30 int mid=(low+hig+1)/2;//【注意mid不是n/2】
31 int t=strcmp(s,dict[mid].fr);
32 if(!t)
33 {
34 printf("%s\n",dict[mid].en);
35 return ;
36 }
37 else if(t>0)
38 {
39 low=mid+1;
40 }
41 else
42 {
43 hig=mid-1;
44 }
45 }
46 printf("eh\n");
47 }
48
49 int main()
50 {
51 int i;
52 for(i=0;;i++)
53 {
54 memset(dict[i].en,0,sizeof(dict[i].en));
55 memset(dict[i].fr,0,sizeof(dict[i].fr));
56 dict[i].en[0]=getchar();
57 if(dict[i].en[0]=='\n')
58 {
59 break;
60 }
61 for(int j=1;;j++)
62 {
63 dict[i].en[j]=getchar();
64 if(dict[i].en[j]==' ')
65 break;
66 }
67 scanf("%s",dict[i].fr);
68 getchar();
69 }
70 qsort(dict,i,sizeof(dic),cmp);
71
72 while(scanf("%s",buf)!=EOF)
73 {
74 mybsearch(buf,i);
75 }
76
77
78 return 0;}

 

posted @ 2012-02-12 11:33  MooreZHENG  阅读(448)  评论(0编辑  收藏  举报