|
|
back to boardWhy Runtime error (access violation) ? #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_READ 250000 #define MASIVE(a, b) (b *) malloc(sizeof(b *)*(a)) #define STRING(a) MASIVE((a), char); #define R_CONCAT(T,S,A) strcat(A, T); \ strcat(A, " "); \ strcat(A, S); \ int * Z_simple(char * str, int len) { int * z = MASIVE(len, int); for (int i = 1; i < len; i++) { int * val = z + i; *val = 0; for (int j = 0; i + j < len; j++) { if (str[i + j] != str[j]) { break; } (*val)++; } } return z; } int * Z(char * str, int len) { int * z = MASIVE(len, int); int l = 0, r = 0; for (int k = 1; k < len; k++) { if (k > r) { l = k; int pos = 0; while (k + pos < len && str[pos] == str[k + pos]) { pos++; } if (pos == 0) { r = l; z[k] = 0; } else { r = k + pos - 1; z[k] = pos; } } else { int m = k - l; int b = z[l] - m; if (z[m] < b) { z[k] = z[m]; } else { int pos1 = b; int pos2 = k + b; int pos = 0; while(pos2 + pos < len && str[pos1 + pos] == str[pos2+pos]) { pos ++; } if (pos != 0) { l = k; r = pos2 + pos - 1; z[k] = b + pos; } else { z[k] = b; } } } } return z; } int main() {
int n; int result = -1; scanf("%d", &n); char * T = STRING(n); char * S = STRING(n); scanf("%s%s", T, S); int len_N = 2*n + 1; char * N = STRING(len_N);
R_CONCAT(T,S,N); int * z = Z(N, len_N); z = z + (n + 1); for (int i = 0; i < n; i++) { if (z[i] == n - i) { int k = z[i]; int b = 0; for (int j = 0; j < i; j++) { if (T[k + j] != S[j]) { b = 1; break; } } if (b == 0) result = i; break; } } printf("%d", result); } |
|
|