fork download
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. char t[1000005], p[40];
  7. int n, m, q, s, pi[40];
  8. bool none, boom;
  9.  
  10. void prefix(int m)
  11. {
  12. int k = -1;
  13.  
  14. pi[0] = -1;
  15.  
  16. for (int q = 1; q < m; q++) {
  17. while (k > -1 && p[k + 1] != p[q]) k = pi[k];
  18. if (p[k + 1] == p[q]) k++;
  19. pi[q] = k;
  20. }
  21. }
  22.  
  23. int main(void)
  24. {
  25. fgets(t, 1000000, stdin);
  26. fgets(p, 36, stdin);
  27.  
  28. t[strlen(t) - 1] = '\0';
  29. p[strlen(p) - 1] = '\0';
  30.  
  31. n = strlen(t);
  32. m = strlen(p);
  33.  
  34. prefix(m);
  35.  
  36. q = -1;
  37. s = -1;
  38. int i = 0;
  39. while(i<n) {
  40. if (t[i] == '!') {
  41. i++;
  42. continue;
  43. }
  44. while (q > -1 && p[q + 1] != t[i]) {
  45. q = pi[q];
  46. s = -1;
  47. }
  48. if (p[q + 1] == t[i]) {
  49. if (s==-1) s = i;
  50. q++;
  51. }
  52. if (q == m-1) {
  53. for (int j = s; j <= i; j++)
  54. t[j] = '!';
  55. boom = true;
  56. q = -1;
  57. }
  58. if (boom) {
  59. boom = false;
  60. i = s - (m - 1); s = -1;
  61. }
  62. else i++;
  63. }
  64.  
  65. none = true;
  66. for (int i = 0; i < n; i++) {
  67. if (t[i] != '!') {
  68. none = false;
  69. printf("%c", t[i]);
  70. }
  71. }
  72. if (none) puts("FRULA");
  73.  
  74.  
  75. return 0;
  76. }
Success #stdin #stdout 0s 4384KB
stdin
mirkovC4nizCC44
C4
stdout
mirkovniz