Source code for submission s1017

bugs.cpp

  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <climits>
  6.  
  7. #include <iostream>
  8. #include <algorithm>
  9.  
  10. #include <vector>
  11. #include <string>
  12. #include <map>
  13. #include <queue>
  14. #include <deque>
  15. #include <stack>
  16. #include <set>
  17.  
  18. using namespace std;
  19.  
  20. typedef unsigned int uint;
  21. typedef long double num;
  22. typedef long long int lint;
  23. typedef struct { int x, y; } intpoint;
  24. typedef struct { num x, y; } numpoint;
  25. typedef struct { lint x, y; } lintpoint;
  26.  
  27. #define EPS (1e-7L)
  28. #define PI (4.0L * atanl(1.0L))
  29.  
  30. #define min(a, b) ((a) < (b) ? (a) : (b))
  31. #define max(a, b) ((a) > (b) ? (a) : (b))
  32. #define abs(a) ((a) < 0 ? -(a) : (a))
  33.  
  34. #define BUG (1u << 10u)
  35. #define BUFFER (2u << 20u)
  36.  
  37. int main(int argc, char *argv[]) {
  38. char bug[BUG];
  39. char *buffer = (char *)malloc(BUFFER * sizeof(char));
  40.  
  41. while (true) {
  42. uint lines;
  43.  
  44. if (2 != scanf("%u %s\n", &lines, bug))
  45. break;
  46.  
  47. uint buglen = strlen(bug);
  48. uint start0 = UINT_MAX;
  49.  
  50. for (uint line = 0; line < lines; line++) {
  51. uint p, s = 0;
  52.  
  53. fgets(buffer, BUFFER, stdin);
  54. for (p = 0; buffer[p] != '\0'; p++) {
  55. if (buffer[p] == bug[s] || buffer[p] == bug[0]) {
  56. if (buffer[p] == bug[0])
  57. s = 0;
  58.  
  59. const uint start = p - s;
  60.  
  61. if (start < start0)
  62. start0 = start;
  63. if (1 + s == buglen) {
  64. if (start0 == start) {
  65. s = 0;
  66. start0 = UINT_MAX;
  67. } else {
  68. const uint len0 = start0 - start;
  69. const uint start1 = p - len0;
  70. memcpy(buffer + start1, buffer + start0, len0);
  71. s = len0;
  72. start0 = start1;
  73. }
  74. } else {
  75. s++;
  76. }
  77. } else {
  78. for (uint q = p - s; q <= p; q++)
  79. putchar(buffer[q]);
  80. s = 0;
  81. start0 = UINT_MAX;
  82. }
  83. }
  84. for (uint q = p - s; q < p; q++)
  85. putchar(buffer[q]);
  86. }
  87. }
  88.  
  89. return 0;
  90. }
  91.