zoukankan      html  css  js  c++  java
  • POJ2774 (后缀数组)

     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 char a[250000],b[110000];
     5 int sa[250000],x[250000],wv[250000],ws[250000],h[250000],rank[250000],wa[250000],wb[250000];
     6 int cmp(int *r,int a,int b,int l){return (r[a]==r[b])&&(r[a+l]==r[b+l]);}
     7 void calheight(int n,int *rank)
     8 {
     9   int i,j,k=0;
    10   for(i=0;i<n;h[rank[i++]]=k)
    11   for(k?k--:0,j=sa[rank[i]-1];a[i+k]==a[j+k];k++);
    12 }
    13 void DA(char *r,int *sa,int n,int m)
    14 {
    15   int i,j,k,*x=wa,*y=wb,*t,p;
    16   for(i=0;i<m;i++)ws[i]=0;
    17   for(i=0;i<n;i++)ws[x[i]=r[i]]++;
    18   for(i=1;i<m;i++)ws[i]+=ws[i-1];
    19   for(i=n-1;i>=0;i--)sa[--ws[x[i]]]=i;
    20   for(j=1,p=1;p<n;j*=2,m=p)
    21   {
    22     for(p=0,i=n-j;i<n;i++)y[p++]=i;
    23     for(i=0;i<n;i++)if(sa[i]>=j)y[p++]=sa[i]-j;
    24     for(i=0;i<n;i++)wv[i]=x[y[i]];
    25     for(i=0;i<m;i++)ws[i]=0;
    26     for(i=0;i<n;i++)ws[wv[i]]++;
    27     for(i=1;i<m;i++)ws[i]+=ws[i-1];
    28     for(i=n-1;i>=0;i--)sa[--ws[wv[i]]]=y[i];
    29     for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1;i<n;i++)
    30     x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++;
    31   }
    32   calheight(n,x);
    33 }
    34 int main()
    35 {
    36   int la,lb,f_b,f_e,s_b,s_e,max,i,n;
    37   scanf("%s",a);
    38   la=strlen(a);
    39   scanf("
    ");
    40   scanf("%s",b);
    41   lb=strlen(b);
    42   f_b=0;
    43   f_e=la-1;
    44   a[la]='#';
    45   s_b=la;
    46   for(i=0;i<lb;i++)a[++la]=b[i];
    47   s_e=la;
    48   a[la+1]=0;
    49   DA(a,sa,la+1,256);
    50   //calheight(la+1); 
    51   max=-0x7fffffff;
    52   for(i=2;i<=la;i++)
    53   {
    54     if(h[i]>max&&((sa[i]>=f_b&&sa[i]<=f_e&&sa[i-1]>=s_b&&sa[i-1]<=s_e)||(sa[i]>=s_b&&sa[i]<=s_e&&sa[i-1]>=f_b&&sa[i-1]<=f_e)))max=h[i];
    55   }
    56   printf("%d",max);
    57   return 0;
    58 }
  • 相关阅读:
    自定义配置文件的使用
    网络编程入门建议
    SQL2005 表分区亲测
    数据库文件组小记
    eclipse 项目显示红叉
    Flex DataGrid可编辑对象实现Enter跳转
    excel 巧用功能
    ACCESS中查询语句:查询所得数据另存到一个指定目录下的文件夹里,并新建新的文件
    邮件合并 :处理ACCESS中批量查询语句的运行
    文件分类批处理程序
  • 原文地址:https://www.cnblogs.com/wjcwjc/p/4978252.html
Copyright © 2011-2022 走看看