/**
* Author: Johan Sannemo
* Date: 2017-04-18
* Source: derived from https://gist.github.com/msg555/4963794 by Mark Gordon
* Description: Computes all faces of the 3-dimension hull of a point set.
* *No four points must be coplanar*, or else random results will be returned.
* All faces will point outwards.
* Time: O(n^2)
* Status: tested on SPOJ CH3D
*/#pragma once
#include"Point3D.h"typedefPoint3D<double>P3;structPR{voidins(intx){(a==-1?a:b)=x;}voidrem(intx){(a==x?a:b)=-1;}intcnt(){return(a!=-1)+(b!=-1);}inta,b;};structF{P3q;inta,b,c;};vector<F>hull3d(constvector<P3>&A){assert(sz(A)>=4);vector<vector<PR>>E(sz(A),vector<PR>(sz(A),{-1,-1}));#define E(x,y) E[f.x][f.y]
vector<F>FS;automf=[&](inti,intj,intk,intl){P3q=(A[j]-A[i]).cross((A[k]-A[i]));if(q.dot(A[l])>q.dot(A[i]))q=q*-1;Ff{q,i,j,k};E(a,b).ins(k);E(a,c).ins(j);E(b,c).ins(i);FS.push_back(f);};rep(i,0,4)rep(j,i+1,4)rep(k,j+1,4)mf(i,j,k,6-i-j-k);rep(i,4,sz(A)){rep(j,0,sz(FS)){Ff=FS[j];if(f.q.dot(A[i])>f.q.dot(A[f.a])){E(a,b).rem(f.c);E(a,c).rem(f.b);E(b,c).rem(f.a);swap(FS[j--],FS.back());FS.pop_back();}}intnw=sz(FS);rep(j,0,nw){Ff=FS[j];#define C(a, b, c) if (E(a,b).cnt() != 2) mf(f.a, f.b, i, f.c);
C(a,b,c);C(a,c,b);C(b,c,a);}}for(F&it:FS)if((A[it.b]-A[it.a]).cross(A[it.c]-A[it.a]).dot(it.q)<=0)swap(it.c,it.b);returnFS;};
Traceback(mostrecentcalllast):File"/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/onlinejudge_verify/documentation/build.py",line71,in_render_source_code_statbundled_code=language.bundle(stat.path,basedir=basedir,options={'include_paths':[basedir]}).decode()~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File"/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/onlinejudge_verify/languages/cplusplus.py",line187,inbundlebundler.update(path)~~~~~~~~~~~~~~^^^^^^File"/opt/hostedtoolcache/Python/3.14.0/x64/lib/python3.14/site-packages/onlinejudge_verify/languages/cplusplus_bundle.py",line312,inupdateraiseBundleErrorAt(path,i+1,"#pragma once found in a non-first line")onlinejudge_verify.languages.cplusplus_bundle.BundleErrorAt:src/geometry/3dHull.h:line11:#pragmaoncefoundinanon-firstline