zoukankan      html  css  js  c++  java
  • [BZOJ1031] 字符加密Cipher

    被wsh大爷拉入坑,然而我会说他现在在睡觉?

    题意:求一个循环同构的字符串的按字典序排序后末尾的字符的序列

    飒飒飒

    我们把这个字符串粘(nian)两遍,然后飒飒飒就好啦

    可以这么轻易是因为对于一个倍长后的字符串,如果我们不能仅按前n位就将这个字符串排序,

    当且仅当这个字符串的某些后缀的完全相同,然而这样就算不排序也不会影响答案,像这样:飒飒飒,或SASASA(赭石在麦门

    上代码,,,代码好惨QAQ

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define maxn 200005
     4 char s[maxn];
     5 int gg[2][maxn],tong[maxn],sa[maxn];
     6 bool cmp(int *nxt,int a,int b,int l){
     7     return nxt[a]==nxt[b]&&nxt[a+l]==nxt[b+l];
     8 }
     9 void SA(int n,int m){   
    10     int i,j,p,*cur=gg[0],*nxt=gg[1];
    11     for(i=0;i<m;i++)tong[i]=0;
    12     for(i=0;i<n;i++)tong[cur[i]=s[i]]++;
    13     for(i=1;i<m;i++)tong[i]+=tong[i-1];
    14     for(i=n-1;i>=0;i--)sa[--tong[cur[i]]]=i;
    15  
    16     for(j=1,p=1;p!=n;j<<=1,m=p){
    17         for(i=n-j,p=0;i<n;i++)nxt[p++]=i;
    18         for(i=0;i<n;i++)if(sa[i]>=j)nxt[p++]=sa[i]-j;
    19          
    20         for(i=0;i<m;i++)tong[i]=0;
    21         for(i=0;i<n;i++)tong[cur[nxt[i]]]++;
    22         for(i=1;i<m;i++)tong[i]+=tong[i-1];
    23         for(i=n-1;i>=0;i--)sa[--tong[cur[nxt[i]]]]=nxt[i];
    24         swap(cur,nxt);
    25         for(i=1,cur[sa[0]]=0,p=1;i<n;i++)
    26             cur[sa[i]]=cmp(nxt,sa[i-1],sa[i],j)?p-1:p++;
    27     }
    28 }
    29 int main(){
    30     scanf("%s",s);
    31     int n=strlen(s);
    32     for(int i=0;i<n;i++)s[n+i]=s[i];
    33     s[n<<1]=0;
    34     SA(n<<1|1,257);
    35     for(int i=1;i<=n<<1;i++)
    36         if(sa[i]<n)printf("%c",s[sa[i]+n-1]);
    37     printf("
    ");
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/Ngshily/p/5527932.html
Copyright © 2011-2022 走看看