Submission #1270250

#TimeUsernameProblemLanguageResultExecution timeMemory
1270250tvdanDrvca (COCI19_drvca)C++20
0 / 110
18 ms3776 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n;
    if (!(cin >> n)) return 0;
    vector<long long> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];
    sort(a.begin(), a.end());
    if (n == 1) { 
        cout << -1 << "\n";
        return 0;
    }

    auto try_pair = [&](int i, int j) -> bool {
        vector<char> used(n, false);
        long long d1 = a[j] - a[i];
        used[i] = true;
        used[j] = true;
        long long last = a[j];
        int pos = j;
        while (true) {
            long long need = last + d1;
            auto it = lower_bound(a.begin() + pos + 1, a.end(), need);
            if (it == a.end() || *it != need) break;
            pos = int(it - a.begin());
            used[pos] = true;
            last = need;
        }
        vector<long long> b;
        for (int k = 0; k < n; ++k) if (!used[k]) b.push_back(a[k]);

        if (b.empty()) return false; 

        if ((int)b.size() >= 2) {
            long long d2 = b[1] - b[0];
            for (size_t t = 2; t < b.size(); ++t) {
                if (b[t] - b[t-1] != d2) return false;
            }
        }
        vector<long long> a1, a2;
        for (int k = 0; k < n; ++k) {
            if (used[k]) a1.push_back(a[k]);
            else a2.push_back(a[k]);
        }
        cout << a1.size() << "\n";
        for (size_t t = 0; t < a1.size(); ++t) {
            if (t) cout << ' ';
            cout << a1[t];
        }
        cout << "\n";
        cout << a2.size() << "\n";
        for (size_t t = 0; t < a2.size(); ++t) {
            if (t) cout << ' ';
            cout << a2[t];
        }
        cout << "\n";
        return true;
    };

    vector<pair<int,int>> tries;
    if (n >= 2) tries.emplace_back(0,1);
    if (n >= 3) {
        tries.emplace_back(0,2);
        tries.emplace_back(1,2);
    }

    for (auto pr : tries) {
        if (try_pair(pr.first, pr.second)) return 0;
    }

    cout << -1 << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...