| 7 | int N, z[maxN], pi[maxN]; |
| 8 | |
| 9 | int main(){ |
| 10 | scanf(" %s", S); |
| 11 | N = (int) strlen(S); |
| 12 | |
| 13 | for(int i = 1, l = 0, r = 0; i < N; i++){ |
| 14 | if(i <= r) z[i] = min(r-i+1, z[i-l]); |
| 15 | while(i+z[i] < N && S[z[i]] == S[i+z[i]]) z[i]++; |
| 16 | if(i+z[i]-1 > r) l = i, r = i+z[i]-1; |
| 17 | } |
| 18 | for(int i = 0; i < N; i++) |
| 19 | printf("%d%c", z[i], (" \n")[i==N-1]); |
| 20 | |
| 21 | for(int i = 1; i < N; i++){ |
| 22 | int j = pi[i-1]; |
| 23 | while(j > 0 && S[i] != S[j]) j = pi[j-1]; |
| 24 | if(S[i] == S[j]) j++; |
| 25 | pi[i] = j; |
| 26 | } |
| 27 | for(int i = 0; i < N; i++) |
| 28 | printf("%d%c", pi[i], (" \n")[i==N-1]); |
| 29 | } |
nothing calls this directly
no outgoing calls
no test coverage detected