| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 547079 | blue | Highway design (CEOI12_highway) | C++17 | 1 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(sz(goodlist) >= 2)
		{
			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(N % 2 == 0)
				Answer(1, 2, goodlist[0], goodlist[0] + 1);
			else
			{
				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 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... | ||||
