Advertisement
Georgiy031

Untitled

Nov 4th, 2020
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. #define all(x) x.begin(), x.end()
  7. #define rall(x) x.rbegin(), x.rend()
  8. //#define endl '\n'
  9. #define boostIO() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  10. ll gcd(ll a, ll b) { return (b == 0 ? a : gcd(b, a % b)); }
  11. typedef long double ld;
  12.  
  13. struct Info {
  14.     bool was = false;
  15.     ll d = 0;
  16.     vector<int> from = vector<int>();
  17.     int oper = -1;
  18.  
  19. };
  20. int main() {
  21.     int n;
  22.     cin >> n;
  23.     vector<int> t(6);
  24.     for (auto& x : t) cin >> x;
  25.     vector<int> s(n + 1, 0);
  26.     vector<int> f(n);
  27.     for (int i = 0; i < n; ++i)
  28.         cin >> s[i];
  29.     for (int i = 0; i < n; ++i)
  30.         cin >> f[i];
  31.     map<vector<int>, Info> info;
  32.     info[s] = { false, 0, vector<int>(), -1 };
  33.     set<pair<ll, vector<int>>> s1;
  34.     s1.insert({ 0, s });
  35.     while (!s1.empty()) {
  36.         ll d = s1.begin()->first;
  37.         vector<int> v = move(s1.begin()->second);
  38.         s1.erase(s1.begin());
  39.         auto vnext = v, vprev = v;
  40.         vnext.back()++;
  41.         vprev.back()--;
  42.         if (vnext.back() <= n && info[vnext].d < d + t[2]) {
  43.             info[vnext].d = d + t[2];
  44.             info[vnext].oper = 2;
  45.             info[vnext].from = v;
  46.             s1.insert({ d + t[2], vnext });
  47.         }
  48.         if (vprev.back() >= 0 && info[vprev].d < d + t[1]) {
  49.             info[vprev].d = d + t[1];
  50.             info[vprev].oper = 1;
  51.             info[vprev].from = v;
  52.             s1.insert({ d + t[1],vprev });
  53.         }
  54.         for (int i = 0; i < n - 1; ++i) {
  55.             for (int j = i + 1; j <= n - 1; ++j) {
  56.                 vector<int> er(v.begin() + i, v.begin() + j);
  57.                 vector<int> nv;
  58.                 for (int k = 0; k < n; ++k) {
  59.                     if (k < i || k >= j) nv.push_back(v[k]);
  60.                 }
  61.                 for (int k = 0; k <= nv.size(); ++k) {
  62.                     vector<int> to(nv.begin(), nv.begin() + k);
  63.                     for (auto x : er) to.push_back(x);
  64.                     for (int pos = k; pos < nv.size(); ++pos) {
  65.                         to.push_back(nv[pos]);
  66.                     }
  67.                     cout << 1;
  68.                 }
  69.             }
  70.         }
  71.     }
  72.  
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement