// team13 #include #include #include #include #include #include #include #include using namespace std; typedef complex pt; const double epsilon = 1e-10; const double heps = 1e-5; const double eps=epsilon; double pi = atan(1.0 )*4; namespace std{ bool operator<(const pt&a, const pt&b){ if(abs(imag(a)-imag(b))>epsilon) return imag(a) hull(vector &v){ pt o = *min_element(v.begin(), v.end()); multimap ,pt > m; for(int i=0;i= epsilon) m.insert(make_pair(make_pair(arg(v[i]-o), abs(v[i]-o)), v[i])); m.insert(make_pair(make_pair(10,0),o)); vector ret(1,o); for(multimap,pt >::iterator p = m.begin(); p!=m.end();p++){ ret.push_back(p->second); for(int n=ret.size(); n>=3 && area(ret[n-3],ret[n-2],ret[n-1])eps || abs(imag(c))>eps) return false; if(real(b) > 1+eps && real(c) > 1+eps) return false; if(real(b) < -eps && real(c) < -eps) return false; return true; } double s = -imag(conj(v) * (b-a))/det; double t = -imag(conj(u) * (b-a))/det; if( (-eps>n,n;){ vector hedge(n); for(int i=0;i>x>>y; hedge[i]=pt(x,y); } vector verts; vector original; int st, ed; double ar; ar=arg(hedge[1]-hedge[0]); verts.push_back(hedge[0] + polar(heps,ar+pi)); original.push_back(hedge[0]); verts.push_back(hedge[0] + polar(heps,ar+0.5*pi)); original.push_back(hedge[0]); verts.push_back(hedge[0] + polar(heps,ar+1.5*pi)); original.push_back(hedge[0]); st = 0; ar=arg(hedge[n-2]-hedge[n-1]); verts.push_back(hedge[n-1] + polar(heps,ar+pi)); original.push_back(hedge[n-1]); verts.push_back(hedge[n-1] + polar(heps,ar+0.5*pi)); original.push_back(hedge[n-1]); verts.push_back(hedge[n-1] + polar(heps,ar+1.5*pi)); original.push_back(hedge[n-1]); ed = 3; for(int i=1;i > > g(verts.size()); for(int i=0;i mm; vector cost(g.size(),-1); mm.insert(make_pair(0,st)); while(!mm.empty()){ double c=mm.begin()->first; int ix=mm.begin()->second; mm.erase(mm.begin()); if (cost[ix]>=-eps) continue; cost[ix]=c; if (ix==ed) break; for (int i=0;i=-eps) continue; mm.insert(make_pair(nc,nx)); } } cout< h=hull(hedge); //cout<