Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int prefix(char *s1, char *s2, int l1, int l2) {
  6. static int k, p[2000002] = { 0 }, ind;
  7. static char concat[2000002] = { '0' };
  8. ind = 1; k = 0;
  9. for (int i = 0; i <= (l1-1); i++) {
  10. concat[ind] = s1[i];
  11. ind++;
  12. }
  13. concat[ind] = ' ';
  14. ind++;
  15. for (int i = 0; i <= (l2-1); i++) {
  16. concat[ind] = s2[i];
  17. ind++;
  18. }
  19. concat[ind] = '\0';
  20.  
  21. int l = strlen(concat)-1;
  22. for (int i = 2; i <= l; i++) {
  23. while ((k > 0) && (concat[k+1] != concat[i])) {
  24. k = p[k];
  25. }
  26. if (concat[k+1] == concat[i]) {
  27. k++;
  28. }
  29. p[i] = k;
  30. }
  31.  
  32. for (int i = 0; i < l; i++) {
  33. concat[i] = '0';
  34. p[i] = 0;
  35. }
  36. return k;
  37. }
  38.  
  39. int main(void) {
  40. static char str1[1000001], str2[1000001];
  41. char k;
  42. int i = 0;
  43. while ((k=getchar()) != '\n') {
  44. if (k != ' ') {
  45. str1[i] = k;
  46. i++;
  47. }
  48. }
  49. str1[i] = '\0';
  50. i = 0;
  51. while ((k = getchar()) != '\n') {
  52. if (k != ' ') {
  53. str2[i] = k;
  54. i++;
  55. }
  56. }
  57. str2[i] = '\0';
  58.  
  59. int pref1 = 0, pref2 = 0,minimum=0;
  60. if (strlen(str1) > strlen(str2)) {
  61. minimum = strlen(str2);
  62. }
  63. else {
  64. minimum = strlen(str1);
  65. }
  66.  
  67. pref1 = prefix(str1, str2, strlen(str1), strlen(str2));
  68. if (pref1 > minimum) {
  69. printf("%d ", minimum);
  70. }
  71. else {
  72. printf("%d ", pref1);
  73. }
  74.  
  75. pref2 = prefix(str2, str1, strlen(str2), strlen(str1));
  76. if (pref2 > minimum) {
  77. printf("%d", minimum);
  78. }
  79. else {
  80. printf("%d", pref2);
  81. }
  82. return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement