Submission #443645

#TimeUsernameProblemLanguageResultExecution timeMemory
443645KarliverDrvca (COCI19_drvca)C++14
110 / 110
105 ms8260 KiB
#include <bits/stdc++.h> #define FIXED_FLOAT(x) std::fixed <<std::setprecision(20) << (x) #define all(v) (v).begin(), (v).end() using namespace std; #define forn(i,n) for (int i = 0; i < (n); ++i) #define rforn(i, n) for(int i = (n) - 1;i >= 0;--i) using ll = long long; int mod = (ll)1e9 + 7; #define PI acos(-1) typedef pair<int, int> pairs; const int INF = 1e9 + 1; const int N = 2e5 + 100; const double eps = 1e-7; template <class T> using V = vector<T>; template <class T> using VV = V<V<T>>; template <typename XPAX> void ckma(XPAX &x, XPAX y) { x = (x < y ? y : x); } template <typename XPAX> void ckmi(XPAX &x, XPAX y) { x = (x > y ? y : x); } void write(V<int> a, V<int> b) { if(b.empty()) { b.push_back(a.back()); a.pop_back(); } cout << a.size() << '\n'; for(auto c : a) cout << c << ' '; cout << '\n'; cout << b.size() << '\n'; for(auto c : b) cout << c << ' '; exit(0); } multiset<int> ps; int bad = 0; bool issok(multiset<int>::iterator it) { auto nxt = it; ++nxt; if(nxt == ps.end() || it == ps.begin())return true; auto pr = it; --pr; return ((*it - *pr) == (*nxt - *it)); } void add(int x) { if(ps.size() < 2) { ps.insert(x); return; } auto it = ps.insert(x); --it; bad += !issok(it); } void del(int x) { auto it = ps.lower_bound(x); bad -= !issok(it); auto pr = it; if(pr != ps.begin()) { pr--; bad -= !issok(pr); } auto nxt = it; if(nxt != ps.end()) { nxt++; if(nxt != ps.end()) { bad -= !issok(nxt); } } it = ps.erase(it); if(it != ps.end()) { bad += !issok(it); } if(it != ps.begin()) { --it; bad += !issok(it); } } void solve() { int n; cin >> n; V<int> a(n); forn(i, n) cin >> a[i]; sort(all(a)); if(n == 2) { cout << 1 << '\n' << a[0] << '\n' << 1 << '\n' << a[1] << '\n'; return; } if(n == 3) { cout << 2 << '\n' << a[0] << ' ' << a[1] << '\n' << 1 << '\n' << a[2] << '\n'; return; } if(n == 4) { cout << 2 << '\n' << a[0] << ' ' << a[1] << '\n' << 2 << '\n' << a[2] << ' ' << a[3] << '\n'; return; } for(int p = 0;p < 3;++p) { for(int q = p + 1;q < 3;++q) { int dif = a[q] - a[p]; int nt = a[q] + dif; ps.clear(); bad = 0; for(int x = 0;x < n;++x) { if(x == p || x == q)continue; add(a[x]); } V<int> one{a[p], a[q]}, two; if(bad == 0) { for(auto c : ps)two.push_back(c); write(one, two); } for(int x = q + 1;x < n;++x) { if(a[x] == nt) { one.push_back(nt); del(nt); if(bad == 0) { for(auto t : ps) two.push_back(t); write(one, two); } nt += dif; } } } } cout << -1 << '\n'; } void test_case() { int t; cin >> t; forn(p, t) { //cout << "Case #" << p + 1 << ": "; solve(); } } int main() { ios::sync_with_stdio(false); cin.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...