提交记录 12976


用户 题目 状态 得分 用时 内存 语言 代码长度
uniqriv 1006. 【模板题】后缀排序 Wrong Answer 0 47.083 ms 3140 KB C++11 1.70 KB
提交时间 评测时间
2020-07-16 14:09:28 2020-08-01 03:02:31
//上一份代码是假的
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int N=1e6+11;

int x[N << 1], y[N << 1], sum[N], sa[N], ht[N];
char str[N];
void get_sa_ht(int len) {
    int m=133;
    for (int i = 0; i <= m; ++i) sum[i] = 0;
    for (int i = 1; i <= len; ++i) ++sum[x[i] = (int)str[i]];
    for (int i = 1; i <= m; ++i) sum[i] += sum[i - 1];
    for (int i = len; i ; --i) sa[sum[x[i]]--] = i;
    for (int h = 1; h <= len; h <<= 1) {
        int yt = 0;
        for(int i = len -h + 1; i <= len; ++i) y[++yt] = i;
        for(int i = 1;i <= len; ++i) {
            if(sa[i] - h > 0) {
                y[++yt] = sa[i] - h;
            }
        }
        for(int i = 0; i <= m; ++i) sum[i] = 0;
        for(int i = 1; i <=len; ++i) ++sum[x[i]];
        for(int i = 1; i <= m; ++i) sum[i] += sum[i - 1];
        for(int i = len; i; --i) sa[sum[x[y[i]]]--] = y[i];
        for(int i = 0; i <= len; ++i) y[i] = x[i];
        x[sa[1]] = 1;
        m=1;
        for(int i = 2; i <= len; ++i){
            if(y[sa[i]] == y[sa[i - 1]] && y[sa[i] + h] == y[sa[i - 1] + h])x[sa[i]] = m;
            else x[sa[i]] = ++m;
        }
        if(m == len)break;
    }
    for(int i = 1; i <= len ; ++i) {
        if(x[i] == 1)continue;
        ht[x[i]] = 0;
        if(i != 1 && ht[x[i - 1]] > 1)ht[x[i]] = ht[x[i - 1]] - 1;
        while(str[i + ht[x[i]]] == str[sa[x[i] - 1] + ht[x[i]]] && max(i + ht[x[i]], sa[x[i] - 1] + ht[x[i]]) <= len) ++ht[x[i]];
    }
}
int main() {
    scanf("%s", str + 1);
    int len = strlen(str + 1);
    get_sa_ht(len);
    for(int i = 1; i <= len; ++i) {
        printf("%d ", sa[i]);
    }
    printf("\n");
    for(int i = 2; i <= len; ++i) {
        printf("%d ",ht[i]);
    }
    return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #136.24 us56 KBWrong AnswerScore: -100

Subtask #1 Testcase #244.62 us60 KBAcceptedScore: 100

Subtask #1 Testcase #344.76 us60 KBAcceptedScore: 0

Subtask #1 Testcase #442.51 us60 KBAcceptedScore: 0

Subtask #1 Testcase #542.13 us60 KBAcceptedScore: 0

Subtask #1 Testcase #640.88 us60 KBAcceptedScore: 0

Subtask #1 Testcase #730.437 ms2 MB + 788 KBAcceptedScore: 0

Subtask #1 Testcase #847.083 ms2 MB + 1008 KBAcceptedScore: 0

Subtask #1 Testcase #932.722 ms2 MB + 880 KBAcceptedScore: 0

Subtask #1 Testcase #1021.22 ms1 MB + 904 KBAcceptedScore: 0

Subtask #1 Testcase #1121.994 ms1 MB + 944 KBAcceptedScore: 0

Subtask #1 Testcase #1238.358 ms3 MB + 48 KBAcceptedScore: 0

Subtask #1 Testcase #1337.143 ms3 MB + 68 KBAcceptedScore: 0

Subtask #1 Testcase #1434.045 ms2 MB + 904 KBAcceptedScore: 0

Subtask #1 Testcase #1533.595 ms2 MB + 908 KBAcceptedScore: 0

Subtask #1 Testcase #1637.151 ms3 MB + 48 KBAcceptedScore: 0

Subtask #1 Testcase #1736.703 ms3 MB + 48 KBAcceptedScore: 0

Subtask #1 Testcase #1837.022 ms3 MB + 48 KBAcceptedScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-25 03:13:13 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠