| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 547077 | blue | Highway design (CEOI12_highway) | C++17 | 2 ms | 592 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include "office.h"
using namespace std;
using vi = vector<int>;
#define sz(x) int(x.size())
int main()
{
	int N = GetN();
	int Q123 = isOnLine(1, 2, 3);
	int Q341 = isOnLine(3, 4, 1);
	vi biglist, smalllist;
	if(Q123 && Q341) //elements are homogenous (4, 0)
	{
		vi goodlist;
		for(int i = 5; i+1 <= N; i += 2)
		{
			if(!isOnLine(1, i, i+1))
			{
				goodlist.push_back(i);
			}
		}
		if(N % 2 == 0)
		{
			if(sz(goodlist) == 1)
				Answer(1, 2, goodlist[0], goodlist[0] + 1);
			else
			{
				int e1 = isOnLine(1, 2, goodlist[0]) ? goodlist[0] + 1 : goodlist[0];
				int e2 = isOnLine(1, 2, goodlist[1]) ? goodlist[1] + 1 : goodlist[1];
				Answer(1, 2, e1, e2);
			}
		}
		else
		{
			if(sz(goodlist) == 1)
			{
				
				vi lst{1, 2};
				
				int agood = !isOnLine(lst[0], lst[1], goodlist[0]);
				int bgood = !isOnLine(lst[0], lst[1], goodlist[0] + 1);
				if(agood && bgood) Answer(lst[0], lst[1], goodlist[0], goodlist[0] + 1);
				else if(agood) Answer(lst[0], lst[1], goodlist[0], N);
				else Answer(lst[0], lst[1], goodlist[0] + 1, N);
			}
			else
			{
				int e1 = isOnLine(1, 2, goodlist[0]) ? goodlist[0] + 1 : goodlist[0];
				int e2 = isOnLine(1, 2, goodlist[1]) ? goodlist[1] + 1 : goodlist[1];
				Answer(1, 2, e1, e2);
			}
		}
	}
	else
	{
		int Q234 = isOnLine(2, 3, 4);
		int Q412 = isOnLine(4, 1, 2);
		int tot = Q234 + Q412 + Q123 + Q341;
		if(tot == 0) //(2, 2)
		{
			if(isOnLine(5, 1, 2)) Answer(1, 2, 3, 4);
			else if(isOnLine(5, 2, 3)) Answer(1, 4, 2, 3);
			else Answer(1, 3, 2, 4);
			return 0;
		}
		int exc = 0;
		if(Q123) exc = 4;
		else if(Q341) exc = 2;
		else if(Q234) exc = 1;
		else exc = 3;
		vi lst;
		for(int i = 1; i <= 4; i++)
			if(i != exc)
				lst.push_back(i);
		vi goodlist;
		for(int i = 5; i+1 <= N; i += 2)
		{
			if(!isOnLine(lst[0], lst[1], i))
				goodlist.push_back(i);
		}
		if(sz(goodlist) >= 2)
		{
			int e1 = isOnLine(lst[0], lst[1], goodlist[0]) ? goodlist[0] + 1 : goodlist[0];
			int e2 = isOnLine(lst[0], lst[1], goodlist[1]) ? goodlist[1] + 1 : goodlist[1];
			Answer(lst[0], lst[1], e1, e2);
			return 0;
		}
		else
		{
			int agood = !isOnLine(lst[0], lst[1], goodlist[0]);
			int bgood = !isOnLine(lst[0], lst[1], goodlist[0] + 1);
			if(agood && bgood) Answer(lst[0], lst[1], goodlist[0], goodlist[0] + 1);
			else if(agood) Answer(lst[0], lst[1], goodlist[0], N);
			else Answer(lst[0], lst[1], goodlist[0] + 1, N);
		}
	}
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
