Source code for submission s842

Go to diff to previous submission

bugs.c

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int AutomatEsc[1000];
  5. char Vstup[3000000];
  6. char OutP[3000000];
  7. char Bugr[2000];
  8.  
  9. int main() {
  10. int T;
  11. char *Bug;
  12. int BL,VL;
  13. int Pos;
  14. int AP;
  15. int OldAP;
  16. int i;
  17. char c;
  18. int WO;
  19. int Found;
  20. int OutPLen;
  21.  
  22. while (scanf("%d",&T) == 1) {
  23. gets(Bugr);
  24. Bug = Bugr+1;
  25. BL = strlen(Bug);
  26. AutomatEsc[0] = -1;
  27. AP = -1;
  28. for (Pos = 1;Pos < BL;Pos++) {
  29. AP++;
  30. while ((*(Bug+AP) != *(Bug+Pos)) && (AP>=0)) {
  31. AP = AutomatEsc[AP];
  32. };
  33. AutomatEsc[Pos]=AP;
  34. };
  35. //for (Pos = 0;Pos < BL;Pos++) printf("%d ",AutomatEsc[Pos]);
  36. //printf("\n");
  37. while (T-->0) {
  38. gets(Vstup);
  39. VL = strlen(Vstup);
  40. Found = 1;
  41. while (Found !=0) {
  42. OutPLen = 0;
  43. Found = 0;
  44. AP = -1;
  45. for (Pos = 0;Pos < VL;Pos++) {
  46. c = *(Vstup+Pos);
  47. OldAP = AP;
  48. while ((*(Bug+AP+1) != c) && (AP >=0)) {
  49. //printf("ESC %d %d\n",AP,AutomatEsc[AP]);
  50. AP = AutomatEsc[AP];
  51. };
  52. if (AP == -1) {
  53. if (c == *Bug) AP = 0;
  54. } else AP++;
  55. //printf("%d %d %c-",AP,OldAP,c);
  56. if (AP == BL-1) {
  57. AP = -1;
  58. Found = 1;
  59. } else {
  60. if (OldAP != -1) {
  61. WO = OldAP - AP;
  62. if (AP == -1) WO--;
  63. for (i=0;i<=WO;i++) {
  64. *(OutP+(OutPLen++))=*(Bug+i);
  65. };
  66. };
  67. if (AP == -1) *(OutP+(OutPLen++))=c;
  68. };
  69. //printf("-\n");
  70. };
  71. for (i=0;i<=AP;i++) *(OutP+(OutPLen++))=*(Bug+i);
  72. *(OutP+OutPLen)=0;
  73. VL = OutPLen;
  74. for (i=0;i<=VL;i++) *(Vstup+i) = *(OutP+i);
  75. //printf("%d %s %s \n",Found,Vstup,OutP);
  76. }
  77. printf("%s\n",OutP);
  78. };
  79. };
  80. return 0;
  81. };
  82.  

Diff to submission s799

bugs.c

--- 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);
                 };
         };