zoukankan      html  css  js  c++  java
  • 成长轨迹45 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2797:最短前缀】

    http://poj.grids.cn/practice/2797
     
    【wa代码】

     1 #include <stdio.h>
    2 #include <string.h>
    3 #include <ctype.h>
    4 #include <cmath>
    5
    6 char ori[10050][22],pre[10050][22];
    7
    8 int main()
    9 {
    10 int n;
    11 for(int i=0;i<10050;i++)
    12 {
    13 memset(ori[i],0,sizeof(ori[i]));
    14 memset(pre[i],0,sizeof(pre[i]));
    15 }
    16 for(n=0;scanf("%s",ori[n])!=EOF;n++);
    17
    18 for(int i=0;i<n;i++)
    19 {
    20 int len=strlen(ori[i]);
    21 for(int j=0;j<len;j++)
    22 {
    23 bool ok=true;
    24 for(int k=i+1;k<n;k++)
    25 if(strcmp(pre[i],pre[k])==0)//如果子串相同
    26 {
    27 ok=false;
    28 if(strcmp(pre[k],ori[k])!=0)//如果k的子串不是它的全串
    29 pre[k][j]=ori[k][j];
    30 }
    31 if(ok)
    32 break;
    33 pre[i][j]=ori[i][j];
    34 }
    35 }
    36 for(int i=0;i<n;i++)
    37 {
    38 printf("%s %s\n",ori[i],pre[i]);
    39 }
    40
    41 return 0;}



    【ac代码】

     1 #include <stdio.h>
    2 #include <string.h>
    3 #include <ctype.h>
    4 #include <cmath>
    5
    6 char ori[10050][22],pre[10050][22];
    7
    8 int main()
    9 {
    10 int n;
    11 for(int i=0;i<10050;i++)
    12 {
    13 memset(ori[i],0,sizeof(ori[i]));
    14 memset(pre[i],0,sizeof(pre[i]));
    15 }
    16 for(n=0;scanf("%s",ori[n])!=EOF;n++);
    17
    18 for(int i=0;i<n;i++)
    19 {
    20 int len=strlen(ori[i]);
    21 /*
    22 【j==len就跳出的话,可能后面有跟它相同子串的还没有改,
    23 所以必须只能在ok==true时跳出】
    24 */
    25 for(int j=0;;j++)
    26 {
    27 bool ok=true;
    28 for(int k=i+1;k<n;k++)
    29 if(strcmp(pre[i],pre[k])==0)//如果子串相同
    30 {
    31 ok=false;
    32 if(strcmp(pre[k],ori[k])!=0)//如果k的子串不是它的全串
    33 pre[k][j]=ori[k][j];
    34 }
    35 if(ok)
    36 break;
    37 if(strcmp(pre[i],ori[i])!=0)
    38 pre[i][j]=ori[i][j];
    39 }
    40 }
    41 for(int i=0;i<n;i++)
    42 {
    43 printf("%s %s\n",ori[i],pre[i]);
    44 }
    45
    46 return 0;}



    【标程】

     1 #include <stdio.h>   
    2 #include <string>
    3 #include <string.h>
    4 #include <vector>
    5 #include <list>
    6 #include <math.h>
    7 #include <algorithm>
    8
    9 using namespace std;
    10
    11 int main()
    12 {
    13 char dic[1001][21], subStr[21],tmp[21];
    14
    15 int i, j, p, k;
    16
    17 memset( dic , 0 , sizeof(char)*1001*21 );
    18 memset( subStr , 0 , sizeof(char)*21 );
    19 memset( tmp , 0 , sizeof(char)*21 );
    20
    21 k = 0 ;
    22 while( EOF != scanf("%s",dic[k]) ) k++;
    23
    24 for( i = 0 ; i < k ; i++ )
    25 {
    26 for( j = 1 ; j <= strlen(dic[i]) ; j++ )
    27 {
    28 strncpy( subStr , dic[i] , j );
    29 for( p = 0 ; p < k ; p++ )
    30 {
    31 if( p != i )
    32 {
    33 strncpy ( tmp , dic[p] , j );
    34 if( strcmp(tmp,subStr) == 0 ) break ;
    35 }
    36 }
    37 if( p < k )continue;
    38 if( p == k )break;
    39 }
    40 printf("%s %s\n",dic[i],subStr);
    41 memset( subStr , 0 , sizeof(char)*21 );
    42 memset( tmp , 0 , sizeof(char)*21 );
    43 }
    44
    45 return 1;
    46 }
  • 相关阅读:
    NOIP201208同余方程
    NOIP模拟赛 最佳组合
    NOIP模拟赛 拓展
    CF1253E Antenna Coverage(DP)
    LOJ6033「雅礼集训 2017 Day2」棋盘游戏 (博弈论,二分图,匈牙利算法)
    CF582E Boolean Function(DP,状态压缩,FMT)
    CF750G New Year and Binary Tree Paths(DP)
    Codeforces Round 596 题解
    AGC008E Next or Nextnext(组合计数,神奇思路)
    ARC082E ConvexScore(神奇思路)
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2347780.html
Copyright © 2011-2022 走看看