#include #include #include typedef std::complex P; double dot(const P& p, const P& q){return std::real(std::conj(p) * q);} double cross(const P& p, const P& q){return std::imag(std::conj(p) * q);} bool areIntersectedLines(const P& p1, const P& p2, const P& q1, const P& q2){ if(cross(p1-p2, q1-p2) == 0 && dot(p1-p2, q1-p2) > 0 && 0 <= norm(q1-p2) && norm(q1-p2) <= norm(p1-p2)){ return true; } if(cross(p1-p2, q2-p2) == 0 && dot(p1-p2, q2-p2) > 0 && 0 <= norm(q2-p2) && norm(q2-p2) <= norm(p1-p2)){ return true; } if(cross(q1-q2, p1-q2) == 0 && dot(q1-q2, p1-q2) > 0 && 0 <= norm(p1-q2) && norm(p1-q2) <= norm(q1-q2)){ return true; } if(cross(q1-q2, p2-q2) == 0 && dot(q1-q2, p2-q2) > 0 && 0 <= norm(p2-q2) && norm(p2-q2) <= norm(q1-q2)){ return true; } return (cross(p1-p2, q1-p2) * cross(p1-p2, q2-p2) <= 0) && (cross(q1-q2, p1-q2) * cross(q1-q2, p2-q2) <= 0); } int N; P ps[200]; int count(const P& p, const P& q){ int res = 0; for(int i=0;i