Go to diff to previous submission
#include <stdio.h> #include <string.h> int AutomatEsc[1000]; char Vstup[3000000]; char OutP[3000000]; char Bugr[2000]; int main() { int T; char *Bug; int BL,VL; int Pos; int AP; int OldAP; int i; char c; int WO; int Found; int OutPLen; Bug = Bugr+1; AutomatEsc[0] = -1; AP = -1; for (Pos = 1;Pos < BL;Pos++) { AP++; while ((*(Bug+AP) != *(Bug+Pos)) && (AP>=0)) { AP = AutomatEsc[AP]; }; AutomatEsc[Pos]=AP; }; //for (Pos = 0;Pos < BL;Pos++) printf("%d ",AutomatEsc[Pos]); //printf("\n"); while (T-->0) { Found = 1; while (Found !=0) { OutPLen = 0; Found = 0; AP = -1; for (Pos = 0;Pos < VL;Pos++) { c = *(Vstup+Pos); OldAP = AP; while ((*(Bug+AP+1) != c) && (AP >=0)) { //printf("ESC %d %d\n",AP,AutomatEsc[AP]); AP = AutomatEsc[AP]; }; if (AP == -1) { if (c == *Bug) AP = 0; } else AP++; //printf("%d %d %c-",AP,OldAP,c); if (AP == BL-1) { AP = -1; Found = 1; } else { if (OldAP != -1) { WO = OldAP - AP; if (AP == -1) WO--; for (i=0;i<=WO;i++) { *(OutP+(OutPLen++))=*(Bug+i); }; }; if (AP == -1) *(OutP+(OutPLen++))=c; }; //printf("-\n"); }; for (i=0;i<=AP;i++) *(OutP+(OutPLen++))=*(Bug+i); *(OutP+OutPLen)=0; VL = OutPLen; for (i=0;i<=VL;i++) *(Vstup+i) = *(OutP+i); //printf("%d %s %s \n",Found,Vstup,OutP); } }; }; return 0; };
--- c4.s799.cteam048.bugs.c.0.bugs.c +++ c4.s842.cteam048.bugs.c.0.bugs.c @@ -4,4 +4,5 @@ int AutomatEsc[1000]; char Vstup[3000000]; +char OutP[3000000]; char Bugr[2000]; @@ -16,4 +17,6 @@ char c; int WO; + int Found; + int OutPLen; while (scanf("%d",&T) == 1) { @@ -35,4 +38,8 @@ gets(Vstup); VL = strlen(Vstup); + Found = 1; + while (Found !=0) { + OutPLen = 0; + Found = 0; AP = -1; for (Pos = 0;Pos < VL;Pos++) { @@ -49,16 +56,24 @@ if (AP == BL-1) { AP = -1; + Found = 1; } else { if (OldAP != -1) { WO = OldAP - AP; if (AP == -1) WO--; - for (i=0;i<=WO;i++) printf("%c",*(Bug+i)); + for (i=0;i<=WO;i++) { + *(OutP+(OutPLen++))=*(Bug+i); + }; }; - if (AP == -1) printf("%c",c); + if (AP == -1) *(OutP+(OutPLen++))=c; }; //printf("-\n"); }; - for (i=0;i<=AP;i++) printf("%c",*(Bug+i)); - printf("\n"); + for (i=0;i<=AP;i++) *(OutP+(OutPLen++))=*(Bug+i); + *(OutP+OutPLen)=0; + VL = OutPLen; + for (i=0;i<=VL;i++) *(Vstup+i) = *(OutP+i); +//printf("%d %s %s \n",Found,Vstup,OutP); +} + printf("%s\n",OutP); }; };