zoukankan      html  css  js  c++  java
  • codevs 3160

    SA入门题,将2个串中间用另外的字符链接即可

    调了半天一直以为是模板的错,原来是乘法超了intQAQ

    不好意思。。传错代码,误认子弟(啪啪啪

     1 #include<bits/stdc++.h>
     2 #define inc(i,l,r) for(int i=l;i<=r;i++)
     3 #define dec(i,l,r) for(int i=l;i>=r;i--)
     4 #define link(x) for(edge *j=h[x];j;j=j->next)
     5 #define mem(a) memset(a,0,sizeof(a))
     6 #define inf 1e9
     7 #define ll long long
     8 #define succ(x) (1<<x)
     9 #define lowbit(x) (x&(-x))
    10 #define NM 200000+5
    11 using namespace std;
    12 int read(){
    13     int x=0,f=1;char ch=getchar();
    14     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    15     while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
    16     return x*f;
    17 }
    18 char st[NM];
    19 int n,sa[NM],rank[NM],tmp[NM],top[NM],h[NM],ans,_t;
    20 void getsa(){
    21     int m=256;int j;
    22     inc(i,0,n)top[rank[i]=(int)st[i]]++;
    23     inc(i,1,m)top[i]+=top[i-1];
    24     inc(i,0,n)sa[--top[rank[i]]]=i;
    25     for(int k=1;k<=n;k<<=1){
    26         inc(i,0,n){
    27             j=sa[i]-k;
    28             if(j<0)j+=n+1;
    29             tmp[top[rank[j]]++]=j;
    30         }
    31         sa[tmp[top[0]=0]]=j=0;
    32         inc(i,1,n){
    33             if(rank[tmp[i]]!=rank[tmp[i-1]]||rank[tmp[i]+k]!=rank[tmp[i-1]+k])
    34             top[++j]=i;
    35             sa[tmp[i]]=j;
    36         }
    37         memcpy(rank,sa,sizeof sa);memcpy(sa,tmp,sizeof tmp);
    38     }
    39     j=0;
    40     inc(i,0,n)if(rank[i]){
    41         if(j)j--;
    42         while(st[i+j]==st[sa[rank[i]-1]+j])j++;
    43         h[rank[i]]=j;
    44     }
    45 }
    46 int main(){
    47     freopen("data.in","r",stdin);
    48     scanf("%s",st);
    49     _t=n=strlen(st);st[n]='$';
    50     scanf("%s",st+n+1);
    51     n=strlen(st);st[n]='$';
    52     getsa();
    53     inc(i,1,n)
    54     if((ll)(sa[i]-_t)*(sa[i-1]-_t)<0)ans=max(ans,h[i]);
    55     printf("%d
    ",ans);
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    Python基础语法—8小时入门版
    PXE服务搭建及配置
    jenkins pipeline
    Bugzilla的安装和部署
    KVM安装、配置及使用说明
    UOS虚拟显示器&VNC配置
    Sikuli-基于图像识别的自动化测试框架
    UOS(国产Linux操作系统)下使用pytest生成allure自动化测试报告
    dogtail的使用方法(二)——元素操作
    dogtail的使用方法(三)——启动应用
  • 原文地址:https://www.cnblogs.com/onlyRP/p/5186039.html
Copyright © 2011-2022 走看看