提交记录 8449


用户 题目 状态 得分 用时 内存 语言 代码长度
ouuan 1006. 【模板题】后缀排序 Wrong Answer 0 1 s 1312 KB C++11 886 B
提交时间 评测时间
2019-02-17 17:12:08 2020-08-01 01:19:27
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N=100010;

char s[N];
int n,w,sa[N],rk[N<<1],oldrk[N],ht[N];

int main()
{
    int i,p;
    
    scanf("%s",s+1);
    n=strlen(s+1);
    for (i=1;i<=n;++i) rk[i]=s[i];
    
    for (w=1;w<n;++w)
    {
        for (i=1;i<=n;++i) sa[i]=i;
        sort(sa+1,sa+n+1,[](int x,int y){return rk[x]==rk[y]?rk[x+w]<rk[y+w]:rk[x]<rk[y];}); //这里用到了lambda表达式
        memcpy(oldrk,rk,sizeof(oldrk)); //由于计算rk的时候原来的rk会被覆盖,要先复制一份
        for (p=0,i=1;i<=n;++i) rk[sa[i]]=oldrk[sa[i]]==oldrk[sa[i-1]]&&oldrk[sa[i]+w]==oldrk[sa[i-1]+w]?p:++p; //若两个子串相同,它们对应的rk也需要相同,所以要去重
    }

int k=0;
for (i=1;i<=n;++i)
{
    if (k) --k;
    while (s[i+k]==s[sa[rk[i]-1]+k]) ++k;
    ht[rk[i]]=k;
}
    
    for (i=1;i<=n;++i) printf("%d ",sa[i]);
for (i=2;i<=n;++i) printf("%d ",ht[i]);
    
	return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #137.61 us48 KBWrong AnswerScore: 0

Subtask #1 Testcase #2117.54 us444 KBWrong AnswerScore: 0

Subtask #1 Testcase #3116.66 us444 KBWrong AnswerScore: 0

Subtask #1 Testcase #4306.04 us444 KBWrong AnswerScore: 0

Subtask #1 Testcase #5291.45 us444 KBWrong AnswerScore: 0

Subtask #1 Testcase #6318.09 us444 KBWrong AnswerScore: 0

Subtask #1 Testcase #71 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #81 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #91 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #101 s1016 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #111 s1016 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #121 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #131 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #141 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #151 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #161 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #171 s1 MB + 288 KBTime Limit ExceededScore: 0

Subtask #1 Testcase #181 s1 MB + 288 KBTime Limit ExceededScore: 0


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