Advertisement
Guest User

Untitled

a guest
Nov 18th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <stack>
  4. std::string file_name = "codelock";
  5.  
  6. int base, len;
  7. std::vector<std::vector<int>> g;
  8. std::vector<int> result;
  9. void find(int begin) {
  10.     std::stack<int> s;
  11.     s.push(begin);
  12.     while (!s.empty()) {
  13.         int cur = s.top();
  14.  
  15.         for (auto it = g[cur].begin(); it != g[cur].end();) {
  16.             int to = *it;
  17.             it = g[cur].erase(it);
  18.             s.push(to);
  19.             break;
  20.         }
  21.         if (cur == s.top()) {
  22.             s.pop();
  23.             result.push_back(cur);
  24.         }
  25.     }
  26. }
  27.  
  28.  
  29. int main() {
  30. #ifdef _DEBUG
  31.     freopen("test.in", "r", stdin);
  32.     freopen("test.out", "w", stdout);
  33. #else
  34.     freopen((file_name + ".in").c_str(), "r", stdin);
  35.     freopen((file_name + ".out").c_str(), "w", stdout);
  36. #endif
  37.     std::ios_base::sync_with_stdio(false);
  38.     std::cin >> base >> len;
  39.  
  40.     if (len == 1) {
  41.         for (int i = 0; i < base; i++)
  42.             std::cout << i;
  43.         return 0;
  44.     }
  45.  
  46.     int n = 1;
  47.     for (int i = 0; i < len - 1; i++)
  48.         n *= base;
  49.  
  50.     g.resize(n);
  51.     for (int i = 0; i < base; i++) {
  52.         int key = 0;
  53.         for (int j = 0; j < len - 1; j++)
  54.             key = key * base + i;
  55.         g[key].push_back(key);
  56.     }
  57.  
  58.     int last_digit = n / base;
  59.    
  60.     for (int i = 0; i < n; i++) {
  61.         int div = (i % last_digit) * base;
  62.         for (int j = 0; j < base; j++) {
  63.             if (div + j != i)
  64.                 g[i].push_back(div + j);
  65.         }
  66.     }
  67.     find(0);
  68.  
  69.     for (int i =0; i < len - 1; i++) {
  70.         std::cout << "0";
  71.     }
  72.  
  73.     for (int i = (int)result.size() - 2; i >= 0; i--)
  74.         std::cout << result[i] % base;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement