• poj 2774 Long Long Message


    不能循环输入。。。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 const int maxn=200000+10;
     6 char s[maxn];
     7 int sa[maxn],t[maxn],t2[maxn],c[maxn];
     8 int rank[maxn],height[maxn];
     9 void build_sa(int n,int m)
    10 {
    11     int i,*x=t,*y=t2;
    12     for(i=0;i<m;i++) c[i]=0;
    13     for(i=0;i<n;i++) c[x[i]=s[i]]++;
    14     for(i=1;i<m;i++) c[i]+=c[i-1];
    15     for(i=n-1;i>=0;i--) sa[--c[x[i]]]=i;
    16 
    17     for(int k=1;k<=n;k<<=1)
    18     {
    19         int p=0;
    20         for(i=n-k;i<n;i++) y[p++]=i;
    21         for(i=0;i<n;i++) if(sa[i]>=k) y[p++]=sa[i]-k;
    22 
    23         for(i=0;i<m;i++) c[i]=0;
    24         for(i=0;i<n;i++) c[x[y[i]]]++;
    25         for(i=1;i<m;i++) c[i]+=c[i-1];
    26         for(i=n-1;i>=0;i--) sa[--c[x[y[i]]]]=y[i];
    27         swap(x,y);
    28         p=1;x[sa[0]]=0;
    29         for(i=1;i<n;i++)
    30             x[sa[i]]=y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+k]==y[sa[i]+k]?p-1:p++;
    31         if(p>=n) break;
    32         m=p;
    33     }
    34 }
    35 void getHeight(int n)
    36 {
    37     int i,k=0;
    38     for(i=1;i<=n;i++) rank[sa[i]]=i;
    39     for(i=0;i<n;i++)
    40     {
    41         if(k) k--;
    42         int j=sa[rank[i]-1];
    43         while(s[i+k]==s[j+k]) k++;
    44         height[rank[i]]=k;
    45     }
    46 }
    47 int solve(int n,int lena)
    48 {
    49    int ans=0;
    50    for(int i=1;i<=n;i++)
    51    {
    52        if(height[i]>ans)
    53          if(sa[i]<lena&&sa[i-1]>lena||sa[i]>lena&&sa[i-1]<lena)
    54           ans=height[i];
    55    }
    56    return ans;
    57 }
    58 int main()
    59 {
    60         gets(s);
    61         int lena=strlen(s);
    62         s[lena]='$';
    63         gets(s+lena+1);
    64         int n=strlen(s);
    65         build_sa(n+1,128);
    66         getHeight(n);
    67         printf("%d
    ",solve(n,lena));
    68         return 0;
    69 }
  • 相关阅读:
    Ubuntu 查看网关地址方法
    cf451C-Predict Outcome of the Game
    C语言运算符优先级
    文件的概念以及VC里的一些文件操作API简介
    关于空指针NULL、野指针、通用指针
    由字符串常量引发的思考
    数字三角形问题
    cdoj第13th校赛初赛F
    cdoj第13th校赛初赛H
    cdoj第13th校赛初赛L
  • 原文地址:https://www.cnblogs.com/sooflow/p/3388124.html
Copyright © 2020-2023  润新知