Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <vector>
- #include <algorithm>
- #include <iostream>
- using namespace std;
- class Task
- {
- public:
- void solve()
- {
- read_input();
- aux.resize(caractere.size() + 1);
- print_output(get_result());
- }
- private:
- int n, k;
- string caractere;
- vector<int> freq;
- vector<char> aux;
- void read_input()
- {
- ifstream fin("in");
- fin >> n >> k;
- fin >> caractere;
- caractere = " " + caractere; // Adaugare element fictiv -
- // indexare de la 1.
- freq.push_back(0); // Adaugare element fictiv - indexare de la 1.
- for (int i = 1, f; i <= n; i++)
- {
- fin >> f;
- freq.push_back(f);
- freq[0] += f; // Numarul total de caractere al sirului generat
- }
- fin.close();
- }
- void BKT(int p, vector<vector<char>> &sol)
- {
- for (int i = 1; i < caractere.size(); ++i)
- {
- if (freq[i])
- {
- int fr = k;
- for (int j = p - 1; j > 0 && fr > 0; --j)
- {
- if (aux[j] == caractere[i])
- {
- fr--;
- }
- else
- {
- break;
- }
- }
- if (fr == 0)
- {
- continue;
- }
- aux[p] = caractere[i];
- freq[i]--;
- freq[0]--;
- if (freq[0] == 0)
- {
- vector<char> s;
- for (int j = 1; j <= p; ++j)
- {
- s.push_back(aux[j]);
- }
- sol.push_back(s);
- }
- else
- {
- BKT(p + 1, sol);
- }
- freq[0]++;
- freq[i]++;
- }
- }
- }
- vector<vector<char>> get_result()
- {
- vector<vector<char>> all;
- BKT(1, all);
- return all;
- }
- void print_output(vector<vector<char>> result)
- {
- ofstream fout("out");
- fout << result.size() << '\n';
- for (int i = 0; i < (int)result.size(); i++)
- {
- for (int j = 0; j < (int)result[i].size(); j++)
- {
- fout << result[i][j];
- }
- fout << '\n';
- }
- fout.close();
- }
- };
- int main()
- {
- Task task;
- task.solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement