用斜率+截距的话要特判斜率无穷的情况, 处理精度.
若都为整数可以约分后用三元组存.
struct _ { int a,b,c; bool operator < (const _ &rhs) const { if (a!=rhs.a) return a<rhs.a; if (b!=rhs.b) return b<rhs.b; return c<rhs.c; } }; _ get(pii a, pii b) { int A = b.y-a.y, B = a.x-b.x, C = -A*a.x-B*a.y; if (!A&&!C) return {0,1,0}; if (!B&&!C) return {1,0,0}; if (!C) { if (A<0) A=-A,B=-B,C=-C; int g = gcd(A,abs(B)); return {A/g,B/g,0}; } if (!B) { if (A<0) A=-A,B=-B,C=-C; int g = gcd(A,abs(C)); return {A/g,0,C/g}; } if (!A) { if (B<0) A=-A,B=-B,C=-C; int g = gcd(B,abs(C)); return {0,B/g,C/g}; } if (A<0) A=-A,B=-B,C=-C; int g = gcd(gcd(A,abs(B)),abs(C)); return {A/g,B/g,C/g}; }