Go to diff to previous submission
#include <stdio.h> #include <stdlib.h> #include <string.h> /* typedef struct { const char *needle; size_t npos; size_t len; size_t *prefix_table; } kmp_ctx; void kmp_init(kmp_ctx *ctx, const char *needle) { size } */ int main(void) { int T; char B[1024]; char line[2000004]; char line2[2000004]; int Blen; while (scanf(" %d %s", &T, B) == 2) { Blen = strlen(B); while (getchar() != '\n'); for (int i = 0; i < T; i++) { fgets(line, 2000004, stdin); char *l1 = line; char *l2 = line2; char *tmp; char *s = l1; char *out = l2; bool changed; do { char *f; changed = false; while ((f = strstr(s, B)) != NULL) { changed = true; while (s != f) { *(out++) = *(s++); } s += Blen; } strcpy(out, s); tmp = l1; l1 = l2; l2 = tmp; s = l1; out = l2; } while (changed); printf("%s", line); } } return 0; }
--- c4.s779.cteam091.bugs.cpp.0.bugs.cpp +++ c4.s788.cteam091.bugs.cpp.0.bugs.cpp @@ -33,8 +33,11 @@ for (int i = 0; i < T; i++) { fgets(line, 2000004, stdin); - int line_len = strlen(line); - char *s = line; - char *out = line2; + char *l1 = line; + char *l2 = line2; + char *tmp; + + char *s = l1; + char *out = l2; bool changed; do { @@ -50,7 +53,10 @@ strcpy(out, s); - memcpy(line, line2, line_len); - s = line; - out = line2; + tmp = l1; + l1 = l2; + l2 = tmp; + + s = l1; + out = l2; } while (changed);