Submission #254510

# Submission time Handle Problem Language Result Execution time Memory
254510 2020-07-30T07:25:37 Z MrRobot_28 Drvca (COCI19_drvca) C++17
0 / 110
110 ms 3200 KB
#include <bits/stdc++.h>
                  
using namespace std;
#define int long long
int n;
vector <bool> used;
vector <int> a;
void funct1()
{
	int diff = a[1] - a[0];
	vector <int> vec1;
	used[0] = 1;
	vec1.push_back(a[0]);
	int it1 = 1;
	for(int j = 1; j < n; j++)
	{
		if(it1 == n)
		{
			break;
		}
		int it = lower_bound(a.begin() + it1, a.end(), vec1.back() + diff) - a.begin();
		if(it != a.size() && a[it] == vec1.back() + diff)
		{
			vec1.push_back(a[it]);
			used[it] = 1;
			it1 = it + 1;
		}
		else
		{
			break;
		}
	}
	vector <int> vec2;
	for(int j = 0; j < n; j++)
	{
		if(!used[j])
		{
			vec2.push_back(a[j]);
		}
	}
	bool flag = true;
	for(int j = 1; j + 1 < vec2.size(); j++)
	{
		if(vec2[j] - vec2[j - 1] != vec2[j + 1] - vec2[j])
		{
			flag = false;
		}
	}
	if(flag && vec2.size() > 0)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
	for(int i = n - 1; i >= 0; i--)
	{
		if(used[i])
		{
			used[i] = 0;
			break;
		}
	}
	vec1.pop_back();
	if(vec1.size() == 0)
	{
		return;
	}
	vec2.clear();
	for(int i = 0; i < n; i++)
	{
		if(!used[i])
		{
			vec2.push_back(a[i]);
		}
	}
	flag = true;
	for(int j = 1; j + 1 < vec2.size(); j++)
	{
		if(vec2[j] - vec2[j - 1] != vec2[j + 1] - vec2[j])
		{
			flag = false;
		}
	}
	if(flag)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
	if(vec1.size() == 1)
	{
		return;
	}
	vec1.pop_back();
	vec2.clear();
	for(int i = n - 1; i >= 0; i--)
	{
		if(used[i])
		{
			used[i] = 0;
			break;
		}
	}
	diff = a[n - 1] - a[n - 2];
	vec2.push_back(a[n - 1]);
	it1 = n - 1;
	while(vec1.size() + vec2.size() < n)
	{
		int j = lower_bound(a.begin(), a.begin() + it1, vec2.back() - diff) - a.begin();
		if(j == it1 || a[j] != vec2.back() - diff)
		{
			break;
		}
		if(used[j])
		{
			if(vec1.back() != a[j])
			{
				break;
			}
			vec1.pop_back();
		}
		it1 = j;
		vec2.push_back(a[j]);
	}
	sort(vec2.begin(), vec2.end());
	if(vec1.size() + vec2.size() == n && vec1.size() != 0)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
}
void funct2()
{
	if(n < 3)
	{
		return;
	}
	int diff = a[2] - a[0];
	vector <int> vec1;
	used[0] = 1;
	vec1.push_back(a[0]);
	int it1 = 1;
	for(int j = 1; j < n; j++)
	{
		if(it1 == n)
		{
			break;
		}
		int it = lower_bound(a.begin() + it1, a.end(), vec1.back() + diff) - a.begin();
		if(it != a.size() && a[it] == vec1.back() + diff)
		{
			vec1.push_back(a[it]);
			used[it] = 1;
			it1 = it + 1;
		}
		else
		{
			break;
		}
	}
	vector <int> vec2;
	for(int i = 0; i < n; i++)
	{
		if(!used[i])
		{
			vec2.push_back(a[i]);
		}
	}
	bool flag = true;
	for(int j = 1; j + 1 < vec2.size(); j++)
	{
		if(vec2[j] - vec2[j - 1] != vec2[j + 1] - vec2[j])
		{
			flag = false;
		}
	}
	if(flag && vec2.size() > 0)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
	for(int i = n - 1; i >= 0; i--)
	{
		if(used[i])
		{
			used[i] = 0;
			break;
		}
	}
	vec1.pop_back();
	if(vec1.size() == 0)
	{
		return;
	}
	vec2.clear();
	for(int i = 0; i < n; i++)
	{
		if(!used[i])
		{
			vec2.push_back(a[i]);
		}
	}
	flag = true;
	for(int j = 1; j + 1 < vec2.size(); j++)
	{
		if(vec2[j] - vec2[j - 1] != vec2[j + 1] - vec2[j])
		{
			flag = false;
		}
	}
	if(flag)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
	if(vec1.size() == 1)
	{
		return;
	}
	vec1.pop_back();
	vec2.clear();
	for(int i = n - 1; i >= 0; i--)
	{
		if(used[i])
		{
			used[i] = 0;
			break;
		}
	}
	diff = a[n - 1] - a[n - 2];
	vec2.push_back(a[n - 1]);
	it1 = n - 1;
	while(vec1.size() + vec2.size() < n)
	{
		int j = lower_bound(a.begin(), a.begin() + it1, vec2.back() - diff) - a.begin();
		if(j == it1 || a[j] != vec2.back() - diff)
		{
			break;
		}
		if(used[j])
		{
			if(vec1.back() != a[j])
			{
				break;
			}
			vec1.pop_back();
		}
		it1 = j;
		vec2.push_back(a[j]);
	}
	sort(vec2.begin(), vec2.end());
	if(vec1.size() + vec2.size() == n && vec1.size() != 0)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
}
void funct3()
{
	if(n < 3)
	{
		return;
	}
	int diff = a[2] - a[1];
	vector <int> vec1;
	used[0] = 1;
	vec1.push_back(a[1]);
	int it1 = 2;
	for(int j = 1; j < n; j++)
	{
		if(it1 == n)
		{
			break;
		}
		int it = lower_bound(a.begin() + it1, a.end(), vec1.back() + diff) - a.begin();
		if(it != a.size() && a[it] == vec1.back() + diff)
		{
			vec1.push_back(a[it]);
			used[it] = 1;
			it1 = it + 1;
		}
		else
		{
			return;
		}
	}
	vector <int> vec2;
	for(int j = 0; j < n; j++)
	{
		if(!used[j])
		{
			vec2.push_back(a[j]);
		}
	}
	bool flag = true;
	for(int j = 1; j + 1 < vec2.size(); j++)
	{
		if(vec2[j] - vec2[j - 1] != vec2[j + 1] - vec2[j])
		{
			flag = false;
		}
	}
	if(flag && vec2.size() > 0)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
	for(int i = n - 1; i >= 0; i--)
	{
		if(used[i])
		{
			used[i] = 0;
			break;
		}
	}
	vec1.pop_back();
	if(vec1.size() == 0)
	{
		return;
	}
	vec2.clear();
	for(int i = 0; i < n; i++)
	{
		if(!used[i])
		{
			vec2.push_back(a[i]);
		}
	}
	flag = true;
	for(int j = 1; j + 1 < vec2.size(); j++)
	{
		if(vec2[j] - vec2[j - 1] != vec2[j + 1] - vec2[j])
		{
			flag = false;
		}
	}
	if(flag)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
	if(vec1.size() == 1)
	{
		return;
	}
	vec1.pop_back();
	vec2.clear();
	for(int i = n - 1; i >= 0; i--)
	{
		if(used[i])
		{
			used[i] = 0;
			break;
		}
	}
	diff = a[n - 1] - a[n - 2];
	vec2.push_back(a[n - 1]);
	it1 = n - 1;
	while(vec1.size() + vec2.size() < n)
	{
		int j = lower_bound(a.begin(), a.begin() + it1, vec2.back() - diff) - a.begin();
		if(j == it1 || a[j] != vec2.back() - diff)
		{
			break;
		}
		if(used[j])
		{
			if(vec1.back() != a[j])
			{
				break;
			}
			vec1.pop_back();
		}
		it1 = j;
		vec2.push_back(a[j]);
	}
	sort(vec2.begin(), vec2.end());
	if(vec1.size() + vec2.size() == n && vec1.size() != 0)
	{
		cout << vec1.size() << "\n";
		for(int i = 0; i < vec1.size(); i++)
		{
			cout << vec1[i] << " ";
		}
		cout << "\n";
		cout << vec2.size() << "\n";
		for(int i = 0; i < vec2.size(); i++)
		{
			cout << vec2[i] << " ";
		}
		exit(0);
	}
}
signed main(){
//	ios_base::sync_with_stdio(false);
//	cin.tie(NULL);
//	cout.tie(NULL);
	cin >> n;
	a.resize(n);
	used.resize(n);
	for(int i = 0; i < n; i++)
	{
		cin >> a[i];
	}
	sort(a.begin(), a.end());
	funct1();
	for(int i = 0; i < n; i++)
	{
		used[i] = 0;
	}
	funct2();
	for(int i = 0; i < n; i++)
	{
		used[i] = 0;
	}
	funct3();
	cout << -1;
	return 0;
}

Compilation message

drvca.cpp: In function 'void funct1()':
drvca.cpp:22:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(it != a.size() && a[it] == vec1.back() + diff)
      ~~~^~~~~~~~~~~
drvca.cpp:42:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 1; j + 1 < vec2.size(); j++)
                 ~~~~~~^~~~~~~~~~~~~
drvca.cpp:52:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:58:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:86:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 1; j + 1 < vec2.size(); j++)
                 ~~~~~~^~~~~~~~~~~~~
drvca.cpp:96:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:102:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:125:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(vec1.size() + vec2.size() < n)
        ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
drvca.cpp:144:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(vec1.size() + vec2.size() == n && vec1.size() != 0)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
drvca.cpp:147:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:153:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp: In function 'void funct2()':
drvca.cpp:178:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(it != a.size() && a[it] == vec1.back() + diff)
      ~~~^~~~~~~~~~~
drvca.cpp:198:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 1; j + 1 < vec2.size(); j++)
                 ~~~~~~^~~~~~~~~~~~~
drvca.cpp:208:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:214:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:242:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 1; j + 1 < vec2.size(); j++)
                 ~~~~~~^~~~~~~~~~~~~
drvca.cpp:252:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:258:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:281:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(vec1.size() + vec2.size() < n)
        ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
drvca.cpp:300:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(vec1.size() + vec2.size() == n && vec1.size() != 0)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
drvca.cpp:303:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:309:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp: In function 'void funct3()':
drvca.cpp:334:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   if(it != a.size() && a[it] == vec1.back() + diff)
      ~~~^~~~~~~~~~~
drvca.cpp:354:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 1; j + 1 < vec2.size(); j++)
                 ~~~~~~^~~~~~~~~~~~~
drvca.cpp:364:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:370:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:398:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j = 1; j + 1 < vec2.size(); j++)
                 ~~~~~~^~~~~~~~~~~~~
drvca.cpp:408:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:414:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:437:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  while(vec1.size() + vec2.size() < n)
        ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
drvca.cpp:456:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(vec1.size() + vec2.size() == n && vec1.size() != 0)
     ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
drvca.cpp:459:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec1.size(); i++)
                  ~~^~~~~~~~~~~~~
drvca.cpp:465:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < vec2.size(); i++)
                  ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 256 KB Output is correct
9 Correct 1 ms 256 KB Output is correct
10 Incorrect 1 ms 256 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 256 KB Output is correct
9 Correct 1 ms 256 KB Output is correct
10 Incorrect 1 ms 256 KB Output isn't correct
11 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 79 ms 3192 KB Output is correct
2 Correct 81 ms 3188 KB Output is correct
3 Correct 86 ms 3200 KB Output is correct
4 Correct 80 ms 3184 KB Output is correct
5 Correct 81 ms 3184 KB Output is correct
6 Correct 85 ms 3184 KB Output is correct
7 Correct 81 ms 3184 KB Output is correct
8 Correct 110 ms 3184 KB Output is correct
9 Incorrect 86 ms 3020 KB Output isn't correct
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 256 KB Output is correct
9 Correct 1 ms 256 KB Output is correct
10 Incorrect 1 ms 256 KB Output isn't correct
11 Halted 0 ms 0 KB -