Submission #1340194

#TimeUsernameProblemLanguageResultExecution timeMemory
1340194blopDrvca (COCI19_drvca)C++20
0 / 110
18 ms2364 KiB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;

template<class T>
using ordered_set = tree<T, null_type, less<T>, 
					rb_tree_tag, tree_order_statistics_node_update>;
template<class T, class U>
using ordered_map = tree<T, U, less<T>, rb_tree_tag,
					tree_order_statistics_node_update>;
#define ll long long
#define ld long double
#define MOD 998244353
#define MAXN 250000
#define SIZE 100
#define pb push_back

ll power(ll a, ll b){
	if (b == 0) return 1;
	ll res = power(a, b / 2);
//	if (b % 2 == 1) return res * res % MOD * a % MOD;
//	return res * res % MOD;
	
	if (b % 2 == 1) return res * res * a;
	return res * res;
}

signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int n;
	cin >> n;
	vector<int> nums(n);
	for (int i = 0; i < n; i++){
		cin >> nums[i];
	}
	sort(nums.begin(), nums.end());
	vector<int> a, b;
	a.pb(nums[0]);
	a.pb(nums[1]);
	vector<bool> used(n, 0);
	used[0] = 1;
	used[1] = 1;
	for (int i = 2; i < n; i++){
		if (nums[i] - a.back() == a[1] - a[0]){
			used[i] = 1;
			a.pb(nums[i]);
		}
	}
	bool can = 1;
	for (int i = 0; i < n; i++){
		if (!used[i]){
			if (b.size() < 2){
				used[i] = 1;
				b.pb(nums[i]);
				continue;
			}
			if (nums[i] - b.back() == b[1] - b[0]){
				used[i] = 1;
				b.pb(nums[i]);
			}
			else{
				can = 0;
				break;
			}
		}
	}
	if (b.empty()){
		b.pb(a.back());
		a.pop_back();
	}
	if (can){
		cout << a.size() << "\n";
		for (auto &num : a) cout << num << " ";
		cout << "\n";
		cout << b.size() << "\n";
		for (auto &num : b) cout << num << " ";
		cout << "\n";
		return 0;
	}
	
	//N minimum 3 here
	can = 1;
	a.clear();
	b.clear();
	for (int i = 0; i < n; i++) used[i] = 0;
	a.pb(nums[0]);
	b.pb(nums[1]);
	a.pb(nums[2]);
	used[0] = used[1] = used[2] = 1;
	for (int i = 3; i < n; i++){
		if (nums[i] - a.back() == a[1] - a[0]){
			used[i] = 1;
			a.pb(nums[i]);
		}
	}
	for (int i = 0; i < n; i++){
		if (!used[i]){
			if (b.size() < 2){
				used[i] = 1;
				b.pb(nums[i]);
				continue;
			}
			if (nums[i] - b.back() == b[1] - b[0]){
				used[i] = 1;
				b.pb(nums[i]);
			}
			else{
				can = 0;
				break;
			}
		}
	}
	if (b.empty()){
		b.pb(a.back());
		a.pop_back();
	}
	if (can){
		cout << a.size() << "\n";
		for (auto &num : a) cout << num << " ";
		cout << "\n";
		cout << b.size() << "\n";
		for (auto &num : b) cout << num << " ";
		cout << "\n";
		return 0;
	}
	
	can = 1;
	a.clear();
	b.clear();
	for (int i = 0; i < n; i++) used[i] = 0;
	a.pb(nums[0]);
	b.pb(nums[1]);
	b.pb(nums[2]);
	used[0] = used[1] = used[2] = 1;
	for (int i = 3; i < n; i++){
		if (nums[i] - b.back() == b[1] - b[0]){
			used[i] = 1;
			b.pb(nums[i]);
		}
	}
	for (int i = 0; i < n; i++){
		if (!used[i]){
			if (a.size() < 2){
				used[i] = 1;
				a.pb(nums[i]);
				continue;
			}
			if (nums[i] - a.back() == a[1] - a[0]){
				used[i] = 1;
				a.pb(nums[i]);
			}
			else{
				can = 0;
				break;
			}
		}
	}
	if (a.empty()){
		a.pb(b.back());
		b.pop_back();
	}
	if (can){
		cout << a.size() << "\n";
		for (auto &num : a) cout << num << " ";
		cout << "\n";
		cout << b.size() << "\n";
		for (auto &num : b) cout << num << " ";
		cout << "\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...