artemgf

Код

Oct 29th, 2017
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #define _USE_MATH_DEFINES
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <string>
  5. #include <set>
  6. #include <map>
  7. #include <algorithm>
  8. #include <string>
  9. #include <math.h>
  10. #include <vector>
  11. #include <cmath>
  12. #include <sstream>
  13. #include <queue>
  14.  
  15. using namespace std;
  16.  
  17. string lis(vector<string>s)
  18. {
  19.     string last;
  20.     last = "";
  21.     for (auto i = s.begin(); i != s.end(); i++)
  22.     {
  23.         last += *i;
  24.     }
  25.     return last;
  26. }
  27.  
  28. string clean(string b)
  29. {
  30.     for (int i = 0; i <=b.size()-1; i++)
  31.     {
  32.         if (b[i] != '0')
  33.         {
  34.             b = b.substr(i, b.size() - i);
  35.             break;
  36.         }
  37.     }
  38.     return b;
  39. }
  40. string d(char b, char a,string s, int num)
  41. {
  42.     int prom;
  43.     prom = (b - '0') - (a - '0');
  44.  
  45.     if (prom >= 0)
  46.         s[num] = prom+'0';
  47.     else
  48.     {
  49.         if (num != 0)
  50.         {
  51.             if (num == 1 && s[0] == '-')
  52.             {
  53.                 s = "-" + to_string((s[num] - '0') - prom) + s.substr(2, s.size() - num-1);
  54.             }
  55.             else
  56.             {
  57.                 s[num] = 10 + prom + '0';
  58.                 s = d(s[num - 1], 1 + '0', s, num - 1);
  59.             }
  60.         }
  61.         else
  62.         {
  63.             s = "-" + to_string(abs((s[num] - '0') + prom)) + s.substr(1, s.size() - num-1);
  64.         }
  65.     }
  66.     return s;
  67. }
  68.  
  69. string dec(string b, string a)
  70. {
  71.     int j;
  72.     j = a.size() - 1;
  73.     for (int i = b.size() - 1; i >= 0; i--)
  74.     {
  75.         if (j<0)
  76.             break;
  77.         b = d(b[i], a[j], b, i);
  78.         j--;
  79.     }
  80.     return b;
  81. }
  82.  
  83. bool gcd05(string a, string b, long long k) {
  84.  
  85.     while (a != b) {
  86.         if (atoi(dec(b,a).c_str()) < 0) {
  87.             string tmp = a;
  88.             a = b;
  89.             b = tmp;
  90.         }
  91.         b = dec(b, a);
  92.         b = clean(b);
  93.     }
  94.    
  95.     return atoi(dec(a,to_string(k)).c_str())>=0;
  96. }
  97.  
  98. int main()
  99. {
  100.     long long  N, M, K, m;
  101.     string last, proms;
  102.     vector <string> s;
  103.     last = "";
  104.     long long prom;
  105.     cin >> N >> M >> K;
  106.     m = M;
  107.  
  108.     for (int i = 1; i <= N; i++)
  109.     {
  110.         cin >> prom;
  111.         s.push_back(to_string(prom));
  112.     }
  113.  
  114.     sort(s.begin(), s.end());
  115.    
  116.     last = lis(s);
  117.  
  118.     while (next_permutation(s.begin(), s.end()))
  119.     {
  120.         proms = lis(s);
  121.         if (gcd05(last, proms, K))
  122.             M--;
  123.         if (M == 0)
  124.             break;
  125.     }
  126.  
  127.     if (m == M)
  128.     {
  129.         cout << -1;
  130.     }
  131.     else
  132.         for (auto i = s.begin(); i != s.end(); i++)
  133.         {
  134.             cout << *i << " ";
  135.         }
  136.  
  137.     _getch();
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment