# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
126517 | wilwxk | Highway design (CEOI12_highway) | C++14 | 11 ms | 4572 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 <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]);
}
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |