8804 2024. 01. 31 09:34:09 Error42 Nomekop cpp17 Elfogadva 100/100 1.557s 4416 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

using ll = long long;

struct nomekop {
    ll pos, delta_attack, companion;
    bool done;
};

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    ll n;
    cin >> n;

    vector<ll> a(n);
    for (ll& x : a)
        cin >> x;

    // all same
    if (count(a.begin(), a.end(), a[0]) == n) {
        cout << "!";

        for (int i = 0; i < n; i++)
            cout << " " << a[i];

        cout << endl;

        return 0;
    }

    cout << "?";

    for (int i = 0; i < n; i++)
        cout << " " << a[i];

    cout << endl;

    ll baseline;
    cin >> baseline;

    vector<nomekop> opponents(n);

    auto const test_against = [&](int const f) {
        for (int i = 0; i < n; i++) {
            if (i == f || a[i] == a[f] || opponents[i].done)
                continue;

            cout << "?";

            for (int j = 0; j < n; j++) {
                cout << " ";
                if (j == i)
                    cout << a[f];
                else if (j == f)
                    cout << a[i];
                else
                    cout << a[j];
            }

            cout << endl;

            ll cur;
            cin >> cur;

            ll delta = cur - baseline;

            opponents[i].pos = i;
            opponents[i].delta_attack = delta / (a[f] - a[i]) + opponents[f].delta_attack;

            opponents[i].done = true;
        }
    };

    test_against(0);

    for (int i = 1; i < n; i++) {
        if (a[i] != a[0]) {
            test_against(i);
            break;
        }
    }

    sort(opponents.begin(), opponents.end(), [&](nomekop const& a, nomekop const& b) {
        return a.delta_attack < b.delta_attack;
    });

    sort(a.begin(), a.end());

    for (int i = 0; i < n; i++)
        opponents[i].companion = a[i];

    sort(opponents.begin(), opponents.end(), [&](nomekop const& a, nomekop const& b) {
        return a.pos < b.pos;
    });

    cout << "!";

    for (nomekop const& x : opponents)
        cout << " " << x.companion;
    cout << endl;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1824 KiB
subtask2 10/10
2 Elfogadva 3ms 2060 KiB
3 Elfogadva 3ms 2136 KiB
subtask3 30/30
4 Elfogadva 4ms 2336 KiB
5 Elfogadva 29ms 2700 KiB
6 Elfogadva 29ms 2784 KiB
7 Elfogadva 30ms 2760 KiB
8 Elfogadva 4ms 2636 KiB
9 Elfogadva 29ms 3008 KiB
subtask4 20/20
10 Elfogadva 104ms 3256 KiB
11 Elfogadva 104ms 3260 KiB
12 Elfogadva 104ms 3456 KiB
13 Elfogadva 104ms 3708 KiB
subtask5 40/40
14 Elfogadva 1.557s 4012 KiB
15 Elfogadva 1.557s 3928 KiB
16 Elfogadva 1.373s 3952 KiB
17 Elfogadva 1.195s 4016 KiB
18 Elfogadva 1.526s 3912 KiB
19 Elfogadva 1.519s 4132 KiB
20 Elfogadva 1.523s 4296 KiB
21 Elfogadva 1.514s 4416 KiB