# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
262224 | georgerapeanu | 고속도로 설계 (CEOI12_highway) | C++11 | 36 ms | 6136 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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;
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |