• 【POJ 3623】 Best Cow Line, Gold (后缀数组)


    【题意】

      

    【分析】

      后缀数组水题,嗯,不认真看输出像我一样就会被坑。。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 #include<algorithm>
     6 #include<queue>
     7 using namespace std;
     8 #define Maxn 300010
     9 
    10 char ss[Maxn],s[Maxn*2];
    11 int a[Maxn*2];
    12 int len,n;
    13 
    14 int Rs[Maxn*2],rk[Maxn*2],sa[Maxn*2],wr[Maxn*2],y[Maxn*2];
    15 void get_sa(int m)
    16 {
    17     for(int i=1;i<=len;i++) rk[i]=a[i];
    18     for(int i=0;i<=m;i++) Rs[i]=0;
    19     for(int i=1;i<=len;i++) Rs[rk[i]]++;
    20     for(int i=1;i<=m;i++) Rs[i]+=Rs[i-1];
    21     for(int i=len;i>=1;i--) sa[Rs[rk[i]]--]=i;
    22     
    23     int p=0,ln=1;
    24     while(p<len)
    25     {
    26         int k=0;
    27         for(int i=len-ln+1;i<=len;i++) y[++k]=i;
    28         for(int i=1;i<=len;i++) if(sa[i]>ln) y[++k]=sa[i]-ln;
    29         for(int i=1;i<=len;i++) wr[i]=rk[y[i]];
    30         
    31         for(int i=0;i<=m;i++) Rs[i]=0;
    32         for(int i=1;i<=len;i++) Rs[wr[i]]++;
    33         for(int i=1;i<=m;i++) Rs[i]+=Rs[i-1];
    34         for(int i=len;i>=1;i--) sa[Rs[wr[i]]--]=y[i];
    35 
    36         p=1;
    37         for(int i=1;i<=len;i++) wr[i]=rk[i];
    38         for(int i=len+1;i<=len+len;i++) wr[i]=0;
    39         rk[sa[1]]=1;
    40         for(int i=2;i<=len;i++)
    41         {
    42             if(wr[sa[i]]!=wr[sa[i-1]]||wr[sa[i]+ln]!=wr[sa[i-1]+ln]) p++;
    43             rk[sa[i]]=p;
    44         }
    45         m=p,ln*=2;
    46     }
    47 }
    48 
    49 /*int height[Maxn];
    50 void get_height()
    51 {
    52     int k=0;
    53     for(int i=1;i<=len;i++) if(sa[i]!=1)
    54     {
    55         int j=sa[rk[i]-1];
    56         if(k) k--;
    57         while(a[i+k]==a[j+k]) k++;
    58         height[rk[i]]=k;
    59     }
    60 }*/
    61 
    62 int ans[Maxn];
    63 
    64 int main()
    65 {
    66     scanf("%d",&n);
    67     for(int i=1;i<=n;i++)
    68     {
    69         scanf("%s",s);
    70         a[i]=s[0]-'A'+1;
    71     }
    72     // ans[n+1]=28;
    73     len=2*n;
    74     for(int i=1;i<=n;i++) a[len-i+1]=a[i];
    75     get_sa(30);
    76     // get_height();
    77     int l=1,r=n;
    78     for(int i=1;i<=n;i++)
    79     {
    80         if(rk[l]<=rk[len-r+1]) ans[i]=a[l++];
    81         else ans[i]=a[r--];
    82     }
    83     for(int i=1;i<=n;i++)
    84     {
    85         printf("%c",ans[i]+'A'-1);
    86         if(i%80==0) printf("
    ");
    87     }
    88     printf("
    ");
    89     return 0; 
    90 }
    View Code

    坑爹的poj改数据规模也不说一声。。

    2016-11-03 09:52:49

  • 相关阅读:
    百度云盘下载限速破解
    (五)Struts之Action类基础(二)
    (四)Decorator设计模式解决GET/POST请求的乱码问题(转)
    (三)Struts之Action类基础(一)
    (二)Struts.xml文件详解
    (一)Struts2 基础
    (三十一)web 开发基础项目
    mysql的索引
    数据库的acid
    String StringBuffer和StringBuilder
  • 原文地址:https://www.cnblogs.com/Konjakmoyu/p/6025392.html
Copyright © 2020-2023  润新知