Go to diff to previous submission
#include <stdio.h> #include <stdlib.h> #include <string.h> char bug[2000]; char line[3000000]; char lineo[3000000]; int lineop; int stack[3000000]; int stackp; void push(int val) { stack[stackp++] = val; } int pop() { return stack[--stackp]; } int top() { return stack[stackp-1]; } int main(int argc, char **argv) { int lines, linel, i, bugl, f, nostart; while (1) { break; while (lines--) { stackp=0; lineop = 0; nostart = 0; for (i=0; i<linel;i++) { lineo[lineop++] = line[i]; lineo[lineop] = 0; sem: f = 0; if (nostart==0 && bug[0] == line[i]) { //printf("Start %d %s %s\n", i, lineo, line+i); push(1); f = 1; } else if (stackp && bug[top()] == line[i]) { //printf("Cont %d %d %s %s\n", i, top(), lineo, line+i); push(pop()+1); if (top() == bugl) { lineop -= bugl; pop(); lineo[lineop] = 0; //printf("OK %s %s\n", lineo, line+i); } f = 1; nostart = 0; } else if (!f) { if (stackp) { //printf("Fail %d %d %s %s\n", i, top(), lineo, line+i); int rem = pop(); lineop -= 1; i -= 1; nostart = 1; goto sem; continue; } //else printf("FailE %d %d %s %s\n", i, top(), lineo, line+i); } } lineo[lineop] = 0; } } return 0; }
--- c4.s1051.cteam129.bugs.c.0.bugs.c +++ c4.s1256.cteam129.bugs.c.0.bugs.c @@ -27,5 +27,5 @@ int main(int argc, char **argv) { - int lines, linel, i, bugl, f; + int lines, linel, i, bugl, f, nostart; while (1) { scanf("%d ", &lines); @@ -39,20 +39,39 @@ gets(line); linel=strlen(line); - for (i=0; i<linel; i++) { + nostart = 0; + for (i=0; i<linel;i++) { lineo[lineop++] = line[i]; + lineo[lineop] = 0; + sem: f = 0; - if (stackp && bug[top()] == line[i]) { + if (nostart==0 && bug[0] == line[i]) { + //printf("Start %d %s %s\n", i, lineo, line+i); + push(1); + f = 1; + } + else if (stackp && bug[top()] == line[i]) { + //printf("Cont %d %d %s %s\n", i, top(), lineo, line+i); push(pop()+1); if (top() == bugl) { lineop -= bugl; pop(); + lineo[lineop] = 0; + //printf("OK %s %s\n", lineo, line+i); } f = 1; + nostart = 0; } - if (bug[0] == line[i]) { - push(1); - f = 1; + else if (!f) { + if (stackp) { + //printf("Fail %d %d %s %s\n", i, top(), lineo, line+i); + int rem = pop(); + lineop -= 1; + i -= 1; + nostart = 1; + goto sem; + continue; + } + //else printf("FailE %d %d %s %s\n", i, top(), lineo, line+i); } - if (!f) stackp = 0; } lineo[lineop] = 0;