zoukankan      html  css  js  c++  java
  • CF335B

     1 /*CF335B 
     2 这个题目的n达到50000,但是串只是有小写字母组成,所以如果字符串的长度大于2600,那么
     3 肯定存在,所开始输入就判断如果长度大于2600,那么直接找当个字母输出100个
     4 否则执行LCS模块,然后判断所得最长公共是否大于100,如果小于100,那么直接输出最长公共
     5 否则从两头分别取50个输出*/
     6 #include<stdio.h>
     7 #include<string.h>
     8 int dp[2600][2600],dir[2600][2600];
     9 char a[50005],b[2605],c[2605];
    10 void LCS(int n,int m)
    11 {
    12     int i,j;
    13     memset(dp,0,sizeof(dp));
    14     memset(dir,0,sizeof(dir));
    15     for(i=1;i<=n;i++)
    16     for(j=1;j<=m;j++)
    17         {
    18             if(a[i-1]==b[j-1])
    19             {
    20                 dp[i][j]=dp[i-1][j-1]+1;
    21                 dir[i][j]=1;
    22             }
    23             else if(dp[i-1][j]>dp[i][j-1])
    24             {
    25                 dp[i][j]=dp[i-1][j];
    26                 dir[i][j]=0;
    27             }
    28             else 
    29             {
    30                  dp[i][j]=dp[i][j-1];
    31                 dir[i][j]=2;
    32             }
    33     }
    34 }
    35 int cont=0;
    36 void print(int n,int m)
    37 {
    38     if(n==0 || m==0) return;
    39     if(dir[n][m]==1)
    40     {
    41         print(n-1,m-1);
    42         c[cont++]=a[n-1];
    43     }
    44     else if(dir[n][m]==0) print(n-1,m);
    45     else print(n,m-1);
    46 }
    47 int main()
    48 {
    49     int j,n;
    50       int hash[250],flag=0,i=0;
    51         char s;
    52       memset(hash,0,sizeof(hash));
    53      gets(a);
    54      n=strlen(a);
    55         for(i=0;i<n;i++)
    56         {
    57            hash[a[i]]++;
    58         }
    59         for(i=0;i<26;i++)
    60         {
    61             if(hash['a'+i]>=100) { s='a'+i; flag=1; break;}
    62         }
    63         if(flag) 
    64         {
    65             for(i=1;i<=100;i++)
    66                 printf("%c",s);
    67             printf("
    ");
    68         }
    69         else
    70         {
    71             for(i=0,j=n-1;i<n;i++,j--)
    72                 b[j]=a[i];
    73             cont=0;
    74             memset(c,0,sizeof(c));
    75             LCS(n,n);
    76             print(n,n);
    77             int num=strlen(c);
    78             //printf("%d
    ",num);
    79             char m1[51],m2[51];
    80             if(num<=100) printf("%s
    ",c);
    81             else
    82             {
    83                 memset(m1,0,sizeof(m1));
    84                  memset(m2,0,sizeof(m2));
    85                 for(i=0;i<50;i++)
    86                     m1[i]=c[i];
    87                 for(i=num-1,j=49;i>=num-50;i--,j--)
    88                     m2[j]=c[i];
    89                 //int num1=strlen(m1);
    90                 //int num2=strlen(m2);
    91                 printf("%s%s
    ",m1,m2);
    92             }
    93 
    94     }
    95     return 0;
    96 }
  • 相关阅读:
    SQL 学习笔记<六> MySQL存储过程基础
    SQL 学习笔记<三> SELECT之连接查询
    六、Delphi10.3通过Json.Serializers单元对大量数据序列化
    七、Delphi10.3读取JSON数组
    五、Delphi10.3通过REST单元使类和JSON数据互相转换
    四、Delphi10.3读取JSON数据
    python格式化输出
    python基础知识02
    发送邮件实例
    python基础知识03
  • 原文地址:https://www.cnblogs.com/okboy/p/3237145.html
Copyright © 2011-2022 走看看