Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <stack>
- std::string file_name = "codelock";
- int base, len;
- std::vector<std::vector<int>> g;
- std::vector<int> result;
- void find(int begin) {
- std::stack<int> s;
- s.push(begin);
- while (!s.empty()) {
- int cur = s.top();
- for (auto it = g[cur].begin(); it != g[cur].end();) {
- int to = *it;
- it = g[cur].erase(it);
- s.push(to);
- break;
- }
- if (cur == s.top()) {
- s.pop();
- result.push_back(cur);
- }
- }
- }
- int main() {
- #ifdef _DEBUG
- freopen("test.in", "r", stdin);
- freopen("test.out", "w", stdout);
- #else
- freopen((file_name + ".in").c_str(), "r", stdin);
- freopen((file_name + ".out").c_str(), "w", stdout);
- #endif
- std::ios_base::sync_with_stdio(false);
- std::cin >> base >> len;
- if (len == 1) {
- for (int i = 0; i < base; i++)
- std::cout << i;
- return 0;
- }
- int n = 1;
- for (int i = 0; i < len - 1; i++)
- n *= base;
- g.resize(n);
- for (int i = 0; i < base; i++) {
- int key = 0;
- for (int j = 0; j < len - 1; j++)
- key = key * base + i;
- g[key].push_back(key);
- }
- int last_digit = n / base;
- for (int i = 0; i < n; i++) {
- int div = (i % last_digit) * base;
- for (int j = 0; j < base; j++) {
- if (div + j != i)
- g[i].push_back(div + j);
- }
- }
- find(0);
- for (int i =0; i < len - 1; i++) {
- std::cout << "0";
- }
- for (int i = (int)result.size() - 2; i >= 0; i--)
- std::cout << result[i] % base;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement