Source code for submission s799

bugs.c

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