# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
262224 | georgerapeanu | Highway design (CEOI12_highway) | C++11 | 36 ms | 6136 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 "office.h"
#pragma once
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
int n;
map<vector<int>,bool> mp;
bool ok(int a,int b,int c){
vector<int> tmp = {a,b,c};
sort(tmp.begin(),tmp.end());
if(mp.count(tmp) == 0){
// printf("asking %d %d %d\n",a,b,c);
mp[tmp] = isOnLine(a,b,c);
// printf("got %d\n",mp[tmp]);
}
return mp[tmp];
}
int main(){
n = GetN();
int a = ok(1,2,3);
if(a == 1){
vector<int> fst = {1,2};
vector<int> snd = {};
for(int i = 4;i <= n && snd.size() <= 2;i += 2){
if(i + 1 > n || ok(1,i,i + 1) == 0){
if(i + 1 <= n && ok(1,2,i)){
snd.push_back(i + 1);
}
else{
snd.push_back(i);
}
}
}
Answer(fst[0],fst[1],snd[0],snd[1]);
return 0;
}
int b = ok(4,5,6);
if(b == 1){
vector<int> fst = {4,5};
vector<int> snd = {};
for(int i = 1;i <= 3;i++){
if(ok(4,5,i) == 0){
snd.push_back(i);
}
}
if(snd.size() > 1){
Answer(fst[0],fst[1],snd[0],snd[1]);
return 0;
}
for(int i = 7;i <= n && snd.size() <= 2;i += 2){
if(i + 1 > n || ok(fst[0],i,i + 1) == 0){
if(i + 1 <= n && ok(fst[0],fst[1],i)){
snd.push_back(i + 1);
}
else{
snd.push_back(i);
}
}
}
Answer(fst[0],fst[1],snd[0],snd[1]);
return 0;
}
else{
int x,y,z;
for(int i = 1;i <= 6;i++){
for(int j = i + 1;j <= 6;j++){
for(int k = j + 1;k <= 6;k++){
if(ok(i,j,k)){
x = i;
y = j;
z = k;
goto done1;
}
}
}
}
done1:
vector<int> fst = {x,y};
vector<int> snd = {};
for(int i = 1;i <= 6;i++){
if(i != x && i != y && i != z && ok(x,y,i) == false){
snd.push_back(i);
}
}
Answer(fst[0],fst[1],snd[0],snd[1]);
return 0;
}
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |