312142026-08-05 14:35:26sarminVizeskannákcpp17Elfogadva 40/4020ms1312 KiB
#include <bits/stdc++.h>
using namespace std;

int a, b, c, L;
vector<array<int, 3>> options(array<int, 3>& f) {
    vector<array<int, 3>> res;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == j) continue;
            auto copied = f;
            int jj = 0, ii = 0;
            if (j == 0) jj = a;
            else if (j == 1) jj = b;
            else jj = c;
            if (i == 0) ii = a;
            else if (i == 1) ii = b;
            else ii = c;
            int c = min({f[i], min(ii, jj), jj - f[j]});
            copied[i] -= c;
            copied[j] += c;
            // cerr << i << " " << j << " --- " << f[0] << " " << f[1] << " " << f[2] << " --> " << copied[0] << " " << copied[1] << " " << copied[2] << "\n";
            res.push_back(copied);
        }
    }
    return res;
}

int main() {

    cin >> a >> b >> c >> L;
    map<array<int, 3>, int> vis;
    vis[{a, 0, 0}] = 1;
    queue<array<int, 3>> q;
    q.push({a, 0, 0});
    int steps = 0;
    int ans = INT_MAX;
    if (a == L) {
        cout << "0\n"; return 0;
    }
    while (!q.empty()) {
        if (steps++ > 1e7) break;
        array<int, 3> front = q.front();
        q.pop();
        // cerr << front[0] << " " << front[1] << " " << front[2] << "\n";
        for (auto i : options(front)) {
            // cerr << i[0] << " " << i[1] << " " << i[2] <<"\n";
            if (vis[i] == 0) {
                vis[i] = vis[front] + 1;
                q.push(i);
                if (i[0] == L || i[1] == L || i[2] == L) {
                    ans = min(ans, vis[i]-1);
                }
            }
        }
    }

    if (ans == INT_MAX) ans = -1;
    cout << ans;
    
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base40/40
1Elfogadva0/01ms508 KiB
2Elfogadva0/01ms316 KiB
3Elfogadva1/11ms508 KiB
4Elfogadva1/11ms316 KiB
5Elfogadva1/11ms332 KiB
6Elfogadva1/11ms348 KiB
7Elfogadva1/11ms316 KiB
8Elfogadva1/11ms316 KiB
9Elfogadva1/11ms500 KiB
10Elfogadva1/11ms508 KiB
11Elfogadva1/11ms384 KiB
12Elfogadva1/11ms316 KiB
13Elfogadva2/21ms348 KiB
14Elfogadva2/21ms316 KiB
15Elfogadva2/21ms316 KiB
16Elfogadva2/21ms332 KiB
17Elfogadva2/21ms500 KiB
18Elfogadva2/21ms316 KiB
19Elfogadva2/22ms316 KiB
20Elfogadva2/22ms508 KiB
21Elfogadva2/21ms316 KiB
22Elfogadva2/21ms316 KiB
23Elfogadva2/21ms316 KiB
24Elfogadva2/213ms904 KiB
25Elfogadva2/28ms580 KiB
26Elfogadva2/220ms1312 KiB
27Elfogadva2/216ms1088 KiB