Submission #519352

#TimeUsernameProblemLanguageResultExecution timeMemory
519352KoDDrvca (COCI19_drvca)C++17
20 / 110
18 ms2196 KiB
#include <bits/stdc++.h>

using std::vector;
using std::array;
using std::pair;
using std::tuple;

bool check(const vector<int>& v) {
    const int n = v.size();
    if (n == 0) return false;
    if (n == 1) return true;
    const int dif = v[1] - v[0];
    if (dif < 0) return false;
    for (int i = 0; i < n - 1; ++i) {
        if (v[i + 1] - v[i] != dif) return false;
    }
    return true;
}

void show(const vector<int>& v) {
    const int n = v.size();
    std::cout << n << '\n';
    for (int i = 0; i < n; ++i) {
        std::cout << v[i] << " \n"[i + 1 == n];
    }
}

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int N;
    std::cin >> N;
    vector<int> A(N);
    for (auto& x : A) {
        std::cin >> x;
    }
    std::sort(A.begin(), A.end());
    assert(N <= 15);
    for (int set = 1; set < (1 << N) - 1; ++set) {
        vector<int> up, down;
        for (int i = 0; i < N; ++i) {
            (set >> i & 1 ? up : down).push_back(A[i]);
        }
        if (check(up) and check(down)) {
            show(up);
            show(down);
            return 0;
        }
    }
    std::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...