/**
* Author: Victor Lecomte, chilli
* Date: 2019-04-26
* License: CC0
* Source: https://vlecomte.github.io/cp-geo.pdf
* Description: Returns true if p lies within the polygon. If strict is true,
* it returns false for points on the boundary. The algorithm uses
* products in intermediate steps so watch out for overflow.
* Time: O(n)
* Usage:
* vector<P> v = {P{4,4}, P{1,2}, P{2,1}};
* bool in = inPolygon(v, P{3, 3}, false);
* Status: stress-tested and tested on kattis:pointinpolygon
*/#pragma once
#include"src/geometry/Point.h"
#include"src/geometry/OnSegment.h"
#include"src/geometry/SegmentDistance.h"template<classP>boolinPolygon(vector<P>&p,Pa,boolstrict=true){intcnt=0,n=sz(p);rep(i,0,n){Pq=p[(i+1)%n];if(onSegment(p[i],q,a))return!strict;//or: if (segDist(p[i], q, a) <= eps) return !strict;cnt^=((a.y<p[i].y)-(a.y<q.y))*a.cross(p[i],q)>0;}returncnt;}
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/InsidePolygon.h:line15:#pragmaoncefoundinanon-firstline