提交记录 20777


用户 题目 状态 得分 用时 内存 语言 代码长度
ASnown 1006. 【模板题】后缀排序 Runtime Error 0 170.196 ms 4596 KB C++14 1.45 KB
提交时间 评测时间
2024-01-02 16:21:06 2024-01-02 16:21:14
#include<bits/stdc++.h>
#define file(F) freopen(#F".in","r",stdin),freopen(#F".out","w",stdout)
using namespace std;
using ll=long long;
void Solve();
const int N = 1e6+16;
int n;
string s;
int sa[N],rk[N],oldrk[N];
bool cmp(int x,int y,int w) {
   return oldrk[x]==oldrk[y]&&(x+w>=n?y+w>=n:oldrk[x+w]==oldrk[y+w]);
}
void suffix_array() {
   int m=127;
   vector<int> cnt(m+1),key1(n),id(n);
   for(int i=0;i<n;i++) cnt[rk[i]=s[i]]++;
   for(int i=1;i<=m;i++) cnt[i]+=cnt[i-1];
   for(int i=n-1;i>=0;i--) sa[--cnt[rk[i]]]=i;
   for(int w=1;w<n;w<<=1) {
      int p=0;
      for(int i=n-1;i>=n-w;i--) id[p++]=i;
      for(int i=0;i<n;i++) if(sa[i]>=w) id[p++]=sa[i]-w;
      vector<int>(m+1,0).swap(cnt);
      for(int i=0;i<n;i++) cnt[key1[i]=rk[id[i]]]++;
      for(int i=1;i<=m;i++) cnt[i]+=cnt[i-1];
      for(int i=n-1;i>=0;i--) sa[--cnt[key1[i]]]=id[i];
      memcpy(oldrk,rk,n<<2);
      rk[sa[0]]=m=0;
      for(int i=1;i<n;i++) rk[sa[i]]=cmp(sa[i],sa[i-1],w)?m:++m;
      if(++m==n) break;
   }
}
int height[N];
void lcp_array() {
   int h=0;
   for(int i=0;i<n;i++) if(rk[i]) {
      if(h) --h;
      while(s[i+h]==s[sa[rk[i]-1]+h]) ++h;
      height[rk[i]]=h;
   }
}
signed main() {
#ifndef ONLINE_JUDGE

#endif
   cin.tie(nullptr)->sync_with_stdio(false);
   Solve();
   return 0;
}
void Solve() {
   cin>>s; n=s.size();
   suffix_array();
   for(int i=0;i<n;i++) printf("%d ",sa[i]+1); puts("");
   lcp_array();
   for(int i=1;i<n;i++) printf("%d ",height[i]); puts("");
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #1170.196 ms72 KBRuntime ErrorScore: 0

Subtask #1 Testcase #245.02 us80 KBAcceptedScore: 0

Subtask #1 Testcase #342.61 us80 KBAcceptedScore: 0

Subtask #1 Testcase #447.36 us80 KBAcceptedScore: 0

Subtask #1 Testcase #545.84 us80 KBAcceptedScore: 0

Subtask #1 Testcase #646.46 us80 KBAcceptedScore: 0

Subtask #1 Testcase #729.717 ms3 MB + 692 KBAcceptedScore: 0

Subtask #1 Testcase #846.461 ms4 MB + 500 KBAcceptedScore: 0

Subtask #1 Testcase #931.992 ms3 MB + 784 KBAcceptedScore: 0

Subtask #1 Testcase #1020.721 ms2 MB + 536 KBAcceptedScore: 0

Subtask #1 Testcase #1121.43 ms2 MB + 740 KBAcceptedScore: 0

Subtask #1 Testcase #1237.662 ms3 MB + 528 KBWrong AnswerScore: 0

Subtask #1 Testcase #1337.135 ms4 MB + 312 KBWrong AnswerScore: 0

Subtask #1 Testcase #1446.273 ms4 MB + 268 KBWrong AnswerScore: 0

Subtask #1 Testcase #1545.814 ms4 MB + 328 KBWrong AnswerScore: 0

Subtask #1 Testcase #1637.828 ms3 MB + 344 KBWrong AnswerScore: 0

Subtask #1 Testcase #1737.374 ms4 MB + 148 KBAcceptedScore: 0

Subtask #1 Testcase #1837.525 ms4 MB + 148 KBAcceptedScore: 0


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