# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
126517 | wilwxk | 고속도로 설계 (CEOI12_highway) | C++14 | 11 ms | 4572 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "office.h"
using namespace std;
const int MAXN=1e5+5;
vector<int> bloco[MAXN], bons;
int ok[MAXN];
int n, nn;
bool checa() {
if(bons.size()<2) return 0;
int cara=bons[0];
while(bons.size()%3) bons.push_back(bons[bons.size()%3-1]);
for(int i=2; i<bons.size(); i+=3) {
int cur=bons[i];
int ant=bons[i-1];
int ant2=bons[i-2];
// printf("sdbaybd %d .. %d\n", i, cur);
if(!isOnLine(bloco[ant2][0], bloco[ant][0], bloco[cur][0])) {
if(!isOnLine(bloco[ant2][0], bloco[ant2][1], bloco[ant][0])) Answer(bloco[ant2][0], bloco[ant2][1], bloco[ant][0], bloco[ant][1]);
else Answer(bloco[cur][0], bloco[cur][1], bloco[ant][0], bloco[ant][1]);
return 1;
}
}
return 0;
}
int main() {
n=GetN();
for(int i=1; i<=n; i++) bloco[(i-1)/3+1].push_back(i);
nn=(n-1)/3+1;
for(int i=1; i<=nn; i++) if(bloco[i].size()==3) ok[i]=isOnLine(bloco[i][0], bloco[i][1], bloco[i][2]);
for(int i=1; i<=nn; i++) if(ok[i]) bons.push_back(i);
if(checa()) return 0;
// printf("sdabsdah\n");
if(bons.size()) {
int cara=bons[0];
vector<int> resp;
for(int i=1; i<=nn; i++) {
if(!ok[i]) {
for(auto cur : bloco[i]) {
if(!isOnLine(bloco[cara][0], bloco[cara][1], cur)) resp.push_back(cur);
}
if(resp.size()>=2) {
Answer(bloco[cara][0], bloco[cara][1], resp[0], resp[1]);
return 0;
}
}
}
}
else {
int pronto=0;
for(int i=0; i<3; i++) {
bool a=isOnLine(bloco[0][0], bloco[0][1], bloco[1][i]);
bool b=isOnLine(bloco[0][1], bloco[0][2], bloco[1][i]);
bool c=isOnLine(bloco[0][0], bloco[0][2], bloco[1][i]);
if(a||b||c) {
if(a) swap(bloco[0][2], bloco[1][i]);
else if(b) swap(bloco[0][0], bloco[1][i]);
else swap(bloco[0][1], bloco[1][i]);
pronto=i; break;
}
}
if(pronto==2) {
Answer(bloco[0][0], bloco[0][1], bloco[1][0], bloco[1][1]);
return 0;
}
else {
vector<int> resp;
for(int i=0; i<3; i++) if(!isOnLine(bloco[0][0], bloco[0][1], bloco[1][i])) resp.push_back(i);
Answer(bloco[0][0], bloco[0][1], resp[0], resp[1]);
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |