Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <cmath>
  5. #include <set>
  6. #include <map>
  7. #include <algorithm>
  8. #include <memory.h>
  9. #include <stack>
  10. #include <math.h>
  11. #include <limits>
  12. #include <sstream>
  13. #include <cmath>
  14. #ifndef _DEBUG
  15. #define __int64 long long
  16. #endif
  17. using namespace std;
  18.  
  19. struct vertex {
  20. vertex* next[2];
  21. char msk;
  22. char c;
  23. vertex* p;
  24. vertex() {
  25. msk = 0;
  26. next[0] = 0;
  27. next[1] = 0;
  28. p = 0;
  29. }
  30. };
  31. vertex *root;
  32.  
  33. vertex keka[16000000];
  34. int sz = 0;
  35. int mak = 1;
  36. void build(int l, int r, char *c) {
  37. vertex* cur = root;
  38. while (l < r) {
  39. cur->msk |= mak;
  40. if (cur->next[c[l] - '0']) {
  41. cur = cur->next[c[l] - '0'];
  42. ++l;
  43. cur->msk |= mak;
  44. continue;
  45. }
  46. cur->next[c[l] - '0'] = keka + sz++;
  47. cur->next[c[l] - '0']->p = cur;
  48. cur = cur->next[c[l] - '0'];
  49. cur->msk |= mak;
  50.  
  51. cur->c = c[l];
  52. ++l;
  53. }
  54.  
  55. }
  56. int k;
  57. int kda = 0;
  58. vertex* curas = 0;
  59. void dfs(vertex* v) {
  60.  
  61. if (v->msk != 3)
  62. return;
  63. if (kda == k) {
  64. kda++;
  65. curas = v;
  66. return;
  67. }
  68. kda++;
  69.  
  70. if (v->next[0])
  71. dfs(v->next[0]);
  72. if (v->next[1])
  73. dfs(v->next[1]);
  74. return;
  75. }
  76.  
  77.  
  78. int main() {
  79. #ifdef _DEBUG
  80. freopen("test.in", "r", stdin);
  81. #else
  82. freopen("input.txt", "r", stdin);
  83. freopen("output.txt", "w", stdout);
  84. #endif
  85. //ios::sync_with_stdio(0);
  86. char st1[5000], st2[5000];
  87. cin >> st1 >> st2;
  88.  
  89. cin >> k;
  90. root = new vertex;
  91. int len = strlen(st1);
  92. for (int i = 0; i < len; ++i)
  93. build(i, len, st1);
  94. mak = 2;
  95. len = strlen(st2);
  96. for (int i = 0; i < len; ++i)
  97. build(i, len, st2);
  98.  
  99. dfs(root);
  100. string st;
  101. while (curas != root) {
  102. st.push_back(curas->c);
  103. curas = curas->p;
  104. }
  105. reverse(st.begin(), st.end());
  106. cout << st << endl;
  107. return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement