Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef unsigned long long ull;
- #define all(x) x.begin(), x.end()
- #define rall(x) x.rbegin(), x.rend()
- //#define endl '\n'
- #define boostIO() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- ll gcd(ll a, ll b) { return (b == 0 ? a : gcd(b, a % b)); }
- typedef long double ld;
- struct Info {
- bool was = false;
- ll d = 0;
- vector<int> from = vector<int>();
- int oper = -1;
- };
- int main() {
- int n;
- cin >> n;
- vector<int> t(6);
- for (auto& x : t) cin >> x;
- vector<int> s(n + 1, 0);
- vector<int> f(n);
- for (int i = 0; i < n; ++i)
- cin >> s[i];
- for (int i = 0; i < n; ++i)
- cin >> f[i];
- map<vector<int>, Info> info;
- info[s] = { false, 0, vector<int>(), -1 };
- set<pair<ll, vector<int>>> s1;
- s1.insert({ 0, s });
- while (!s1.empty()) {
- ll d = s1.begin()->first;
- vector<int> v = move(s1.begin()->second);
- s1.erase(s1.begin());
- auto vnext = v, vprev = v;
- vnext.back()++;
- vprev.back()--;
- if (vnext.back() <= n && info[vnext].d < d + t[2]) {
- info[vnext].d = d + t[2];
- info[vnext].oper = 2;
- info[vnext].from = v;
- s1.insert({ d + t[2], vnext });
- }
- if (vprev.back() >= 0 && info[vprev].d < d + t[1]) {
- info[vprev].d = d + t[1];
- info[vprev].oper = 1;
- info[vprev].from = v;
- s1.insert({ d + t[1],vprev });
- }
- for (int i = 0; i < n - 1; ++i) {
- for (int j = i + 1; j <= n - 1; ++j) {
- vector<int> er(v.begin() + i, v.begin() + j);
- vector<int> nv;
- for (int k = 0; k < n; ++k) {
- if (k < i || k >= j) nv.push_back(v[k]);
- }
- for (int k = 0; k <= nv.size(); ++k) {
- vector<int> to(nv.begin(), nv.begin() + k);
- for (auto x : er) to.push_back(x);
- for (int pos = k; pos < nv.size(); ++pos) {
- to.push_back(nv[pos]);
- }
- cout << 1;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement