模板 - 皮克定理
阿新 • • 發佈:2019-04-19
mes scan ros points operator- std struct can 皮克定理
#include<bits/stdc++.h> using namespace std; typedef long long ll; struct Point; typedef Point Vector; struct Point { ll x,y; Point(){} Point(ll _x,ll _y):x(_x),y(_y){} ll how_many_points(Point p){ int g=__gcd(abs(x-p.x),abs(y-p.y)); return g+1; } Vector operator-(Vector v){ return Vector(x-v.x,y-v.y); } ll cross(Vector p){ return x*p.y-y*p.x; } }; ll n,m,p; int main() { scanf("%lld%lld%lld",&n,&m,&p); Point O(0,0); Point A(n,m); Point B(p,0); Vector _A=(A-O); Vector _B=(B-O); ll _2S=abs(_A.cross(_B)); ll b=(O.how_many_points(A)+A.how_many_points(B)+B.how_many_points(O))-3; ll _2a=_2S-b+2; printf("%lld\n",_2a/2ll); }
模板 - 皮克定理