Submission #1270248

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

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

    int n;
    cin >> n;
    vector<long long> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];

    sort(a.begin(), a.end());
    unordered_set<long long> all(a.begin(), a.end());
 
    for (int j = 1; j < n; j++) {
        long long d1 = a[j] - a[0];

        vector<long long> row1;
        unordered_set<long long> used;
        for (long long x = a[0]; all.count(x); x += d1) {
            row1.push_back(x);
            used.insert(x);
        }

        vector<long long> row2;
        for (auto x : a) if (!used.count(x)) row2.push_back(x);

        if (row1.empty() || row2.empty()) continue;

        bool ok = true;
        if (row2.size() > 2) {
            long long d2 = row2[1] - row2[0];
            for (int i = 2; i < (int)row2.size(); i++) {
                if (row2[i] - row2[i - 1] != d2) {
                    ok = false;
                    break;
                }
            }
        }

        if (ok) {
            cout << (int)row1.size() << "\n";
            for (int i = 0; i < (int)row1.size(); i++)
                cout << row1[i] << (i + 1 == row1.size() ? '\n' : ' ');
            cout << (int)row2.size() << "\n";
            for (int i = 0; i < (int)row2.size(); i++)
                cout << row2[i] << (i + 1 == row2.size() ? '\n' : ' ');
            return 0;
        }
    }

        vector<long long> row1 = {a[0]};
        vector<long long> row2(a.begin() + 1, a.end());
        bool ok = true;
        if (row2.size() > 2) {
            long long d2 = row2[1] - row2[0];
            for (int i = 2; i < (int)row2.size(); i++) {
                if (row2[i] - row2[i - 1] != d2) {
                    ok = false;
                    break;
                }
            }
        }
        if (!row2.empty() && ok) {
            cout << 1 << "\n" << row1[0] << "\n";
            cout << (int)row2.size() << "\n";
            for (int i = 0; i < (int)row2.size(); i++)
                cout << row2[i] << (i + 1 == row2.size() ? '\n' : ' ');
            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...