Source code for submission s945

Go to diff to previous submission

bugs.cpp

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <iostream>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8.  
  9. int myFind ( int lastPos, int length, char * line, char * text, bool *& erased, bool & count )
  10. {
  11. int k = 0;
  12. int text_length = (int) strlen (text);
  13. int g;
  14. bool toErase = true;
  15. for ( int i = lastPos; i < length - text_length; i++ )
  16. {
  17. if ( erased[i] == false && line[i] == text[0] )
  18. {
  19. k = 1;
  20. g = i + 1;
  21. for ( int j = i + 1; j < i + text_length; j++ )
  22. {
  23. while ( erased[g] )
  24. g++;
  25. if ( g >= length || line[g] != text[k++] )
  26. {
  27. toErase = false;
  28. break;
  29. }
  30. g++;
  31. }
  32. if ( toErase )
  33. {
  34. k = i;
  35. for ( int z = i; z < i + text_length; z++ )
  36. {
  37. while ( erased[k] )
  38. k++;
  39. erased[k] = true;
  40. }
  41. count = true;
  42. return i;
  43. }
  44. toErase = true;
  45. }
  46. }
  47. return -1;
  48. }
  49.  
  50. void analyseLine ( char * text, char * line, bool * erased )
  51. {
  52. int length = (int) strlen(line);
  53. int text_length = (int) strlen (text);
  54. int lastPos = 0;
  55. bool count = false;
  56. if ( !length )
  57. {
  58. cout << endl;
  59. return;
  60. }
  61. while ( 1 )
  62. {
  63. lastPos = myFind ( lastPos, length, line, text, erased, count );
  64. if ( lastPos == -1 )
  65. break;
  66. lastPos = (int)lastPos - text_length + 1 >= 0 ? lastPos - text_length + 1 : 0;
  67. }
  68. if ( !count )
  69. cout << line << endl;
  70. else
  71. {
  72. for ( int i = 0; i < length; i++ )
  73. {
  74. if ( !erased[i] )
  75. cout << line[i];
  76. }
  77. cout << endl;
  78. }
  79. }
  80.  
  81. int main ( void )
  82. {
  83. int n, i, j;
  84. char tmp;
  85. bool * erased = new bool[2000100];
  86. char * text = new char[1010];
  87. char * line = new char[2000100];
  88.  
  89. while ( scanf ( "%d %s%c", &n, text, &tmp ) == 3 )
  90. {
  91. for ( i = 0; i < n; i++ )
  92. {
  93. gets ( line );
  94. for ( j = 0; j < (int)strlen (line); j++ )
  95. erased[j] = false;
  96. analyseLine ( text, line, erased );
  97. }
  98. }
  99.  
  100. delete [] erased;
  101. delete [] text;
  102. delete [] line;
  103. return 0;
  104. }
  105.  

Diff to submission s915

bugs.cpp

--- c4.s915.cteam019.bugs.cpp.0.bugs.cpp
+++ c4.s945.cteam019.bugs.cpp.0.bugs.cpp
@@ -3,13 +3,15 @@
 #include <string>
 #include <iostream>
+#include <string.h>
 
 using namespace std;
 
-int myFind ( int lastPos, int length, string & line, string & text, bool *& erased, bool & count )
+int myFind ( int lastPos, int length, char * line, char * text, bool *& erased, bool & count )
  {
    int k = 0;
+   int text_length = (int) strlen (text);
    int g;
    bool toErase = true; 
-   for ( int i = lastPos; i < (int)(length - text.length()); i++ )
+   for ( int i = lastPos; i < length - text_length; i++ )
     {
       if ( erased[i] == false && line[i] == text[0] )
@@ -17,5 +19,5 @@
          k = 1;
          g = i + 1;
-         for ( int j = i + 1; j < (int)(i + text.length()); j++ )
+         for ( int j = i + 1; j < i + text_length; j++ )
           {
             while ( erased[g] )
@@ -31,5 +33,5 @@
           {
             k = i;
-            for ( int z = i; z < i + (int)text.length(); z++ )
+            for ( int z = i; z < i + text_length; z++ )
              {
                while ( erased[k] )
@@ -46,7 +48,8 @@
  }
 
-void analyseLine ( string & text, string & line, bool * erased )
+void analyseLine ( char * text, char * line, bool * erased )
  {
-   int length = (int) line.length();
+   int length = (int) strlen(line);
+   int text_length = (int) strlen (text);
    int lastPos = 0;
    bool count = false;
@@ -61,5 +64,5 @@
       if ( lastPos == -1 )
         break;
-      lastPos = (int)lastPos - text.length() + 1 >= 0 ? lastPos - (int)text.length() + 1 : 0;
+      lastPos = (int)lastPos - text_length + 1 >= 0 ? lastPos - text_length + 1 : 0;
     } 
    if ( !count ) 
@@ -79,16 +82,15 @@
  {
    int n, i, j;
-   char bug[1010];
    char tmp;
    bool * erased = new bool[2000100];
-   string text, line;
+   char * text = new char[1010];
+   char * line = new char[2000100];
    
-   while ( scanf ( "%d %s%c", &n, bug, &tmp ) == 3 )
+   while ( scanf ( "%d %s%c", &n, text, &tmp ) == 3 )
     {
-      text = string ( bug );
       for ( i = 0; i < n; i++ )
        {
-         getline ( cin, line );
-         for ( j = 0; j < (int)line.length(); j++ )
+         gets ( line );
+         for ( j = 0; j < (int)strlen (line); j++ )
            erased[j] = false;
          analyseLine ( text, line, erased );
@@ -97,4 +99,6 @@
     
    delete [] erased; 
+   delete [] text;
+   delete [] line;
    return 0;
  }