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