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