zoukankan      html  css  js  c++  java
  • 成长轨迹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;}
  • 相关阅读:
    SpringCloud------熔断与降级
    Linux中的defunct进程(僵尸进程)
    网站论坛收藏
    同步与阻塞,异步与非阻塞的区别
    Linux下批量杀掉筛选进程
    MapReduce运行原理和过程
    TF-IDF原理
    如何解决VMware 虚拟机不能铺满屏幕
    桥接和nat连接
    http: server gave HTTP response to HTTPS client & Get https://192.168.2.119/v2/: dial tcp 192.168.2.119:443: getsockopt: connection refused
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2347785.html
Copyright © 2011-2022 走看看