Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #include <fstream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. class Task
  9. {
  10. public:
  11. void solve()
  12. {
  13. read_input();
  14. aux.resize(caractere.size() + 1);
  15. print_output(get_result());
  16. }
  17.  
  18. private:
  19. int n, k;
  20. string caractere;
  21. vector<int> freq;
  22. vector<char> aux;
  23.  
  24. void read_input()
  25. {
  26. ifstream fin("in");
  27. fin >> n >> k;
  28. fin >> caractere;
  29. caractere = " " + caractere; // Adaugare element fictiv -
  30. // indexare de la 1.
  31. freq.push_back(0); // Adaugare element fictiv - indexare de la 1.
  32. for (int i = 1, f; i <= n; i++)
  33. {
  34. fin >> f;
  35. freq.push_back(f);
  36. freq[0] += f; // Numarul total de caractere al sirului generat
  37. }
  38. fin.close();
  39. }
  40.  
  41. void BKT(int p, vector<vector<char>> &sol)
  42. {
  43. for (int i = 1; i < caractere.size(); ++i)
  44. {
  45. if (freq[i])
  46. {
  47. int fr = k;
  48. for (int j = p - 1; j > 0 && fr > 0; --j)
  49. {
  50. if (aux[j] == caractere[i])
  51. {
  52. fr--;
  53. }
  54. else
  55. {
  56. break;
  57. }
  58. }
  59. if (fr == 0)
  60. {
  61. continue;
  62. }
  63. aux[p] = caractere[i];
  64. freq[i]--;
  65. freq[0]--;
  66. if (freq[0] == 0)
  67. {
  68. vector<char> s;
  69. for (int j = 1; j <= p; ++j)
  70. {
  71. s.push_back(aux[j]);
  72. }
  73. sol.push_back(s);
  74. }
  75. else
  76. {
  77. BKT(p + 1, sol);
  78. }
  79. freq[0]++;
  80. freq[i]++;
  81. }
  82. }
  83. }
  84.  
  85. vector<vector<char>> get_result()
  86. {
  87. vector<vector<char>> all;
  88.  
  89. BKT(1, all);
  90.  
  91. return all;
  92. }
  93.  
  94. void print_output(vector<vector<char>> result)
  95. {
  96. ofstream fout("out");
  97. fout << result.size() << '\n';
  98. for (int i = 0; i < (int)result.size(); i++)
  99. {
  100. for (int j = 0; j < (int)result[i].size(); j++)
  101. {
  102. fout << result[i][j];
  103. }
  104. fout << '\n';
  105. }
  106. fout.close();
  107. }
  108. };
  109.  
  110. int main()
  111. {
  112. Task task;
  113. task.solve();
  114. return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement