关于此题

P2870 [USACO07DEC] Best Cow Line G

我的代码没空字符,但是过了。 [记录](https://www.luogu.com.cn/record/105071005) ```cpp #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int L = 1000000; int ls; char s[L + 5]; void init() { scanf("%d", &ls); for(int i = 1; i <= ls; i++) { scanf(" %c", &s[i]); } } int sa[L + 5], rk[L + 5]; int id[L + 5], ork[L * 2 + 5]; int cnt[L + 5]; void getSA() { for(int i = 1; i <= ls; i++) { cnt[(int)s[i]]++; } int P = L; for(int i = 1; i <= P; i++) { cnt[i] += cnt[i - 1]; } for(int i = ls; i >= 1; i--) { sa[cnt[(int)s[i]]--] = i; } for(int i = 1; i <= P; i++) { cnt[i] = 0; } int p = 0; for(int i = 1; i <= ls; i++) { if(i == 1 || s[sa[i]] != s[sa[i - 1]]) { rk[sa[i]] = ++p; } else { rk[sa[i]] = p; } } P = p; for(int len = 2; len <= ls * 2; len <<= 1) { int mid = len >> 1; p = 0; for(int i = ls - mid + 1; i <= ls; i++) { id[++p] = i; } for(int i = 1; i <= ls; i++) { if(sa[i] > mid) { id[++p] = sa[i] - mid; } } for(int i = 1; i <= ls; i++) { cnt[rk[id[i]]]++; } for(int i = 1; i <= P; i++) { cnt[i] += cnt[i - 1]; } for(int i = ls; i >= 1; i--) { sa[cnt[rk[id[i]]]--] = id[i]; } for(int i = 1; i <= P; i++) { cnt[i] = 0; } for(int i = 1; i <= ls; i++) { ork[i] = rk[i]; } p = 0; for(int i = 1; i <= ls; i++) { if(i == 1 || !(ork[sa[i]] == ork[sa[i - 1]] && ork[sa[i] + mid] == ork[sa[i - 1] + mid])) { rk[sa[i]] = ++p; } else { rk[sa[i]] = p; } } P = p; } } char ans[L + 5]; int cntC; void solve() { // for(int i = 1; i <= ls; i++) // { // printf("%c ", s[i]); // } for(int i = ls + 1; i <= ls * 2; i++) { s[i] = s[ls - (i - ls) + 1]; } ls *= 2; getSA(); // for(int i = 1; i <= ls; i++) // { // printf("%d ", rk[i]); // } // printf("\n"); int l = 1, r = ls / 2; while(l <= r) { if(rk[l] <= rk[ls - r + 1]) { ans[++cntC] = s[l++]; } else { ans[++cntC] = s[r--]; } } for(int i = 1; i <= ls / 2; i++) { printf("%c", ans[i]); if(i % 80 == 0) { printf("\n"); } } } int main() { init(); solve(); return 0; } ```
by cmaths @ 2023-03-18 16:31:40


这题可能没必要,有些要用到height的时候防止俩字符串合成一个不可能的子串
by xu826281112 @ 2023-07-21 00:15:38


|