제출 #1264861

#제출 시각아이디문제언어결과실행 시간메모리
1264861goulthenDrvca (COCI19_drvca)C++20
0 / 110
68 ms11968 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
#define fi first
#define se second

const int MAXN = 1e5 + 10;
const int INF = 1e18+10;
int a[MAXN], dif[MAXN], n;

void check(int x, int y) {
	multiset<int> s, dif;
	int k = y-x;
	rep(i,1,n) s.insert(a[i]);
	s.erase(s.find(x));
	s.erase(s.find(y));

	vector<int> ans;
	ans.pb(x); ans.pb(y);

	int last = -1;
	for (auto &v : s) {
		if (last != -1) dif.insert(v-last);
		last = v;
	}

	int tmp = y + k;
	while ((int)ans.size() < n) {
		if (*dif.begin() == *dif.rbegin()) {
			cout << ans.size() << '\n';
			for (int &v : ans) cout << v << " ";
			cout << '\n' << s.size() << '\n';
			for (auto &v : s) cout << v << " ";
			cout << '\n';	
	      exit(0);  
	    }

	    auto it = s.find(tmp);
	    if (it == s.end()) break;
	    auto l = it, r = it;

	    if (it != s.begin()) {
	    	l--;
	    	dif.erase(dif.find(*it-*l));
	    }
	    if (++r != s.end()) {
	    	dif.erase(dif.find(*r-*it));
	    	if (it != s.begin()) dif.insert(*r-*l); 
	    }

	    s.erase(it);
	    ans.pb(tmp);
	    tmp += k;
	}
}

int32_t main(){
	ios::sync_with_stdio(0);cin.tie(0);
	cin >> n;
	rep(i,1,n) cin >> a[i];
	sort(a+1, a+n+1);
	
	if (n==2) {
		cout << "1\n" << a[1] << '\n' << "2\n" << a[2] << '\n';
		return 0;
	}
	if (n <= 4) {
		cout << "2\n";
		rep(i,1,2) cout << a[i] << " \n"[i==2];
		cout << n-2 << '\n';
		rep(i,3,n) cout << a[i] << " \n"[i==n];
		return 0;
	}

	check(a[1], a[2]);
	check(a[1], a[3]);
	check(a[2], a[3]);

	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...