皮克定理(求封闭区域内整数点的个数)

S=a+b/21。

S表示多边形的面积 a表示多边形内的整数点 b表示多边形边界上的整数点。

求s的板子:

    int n;
    cin >> n;
    ll x0,y0,x1,y1,S = 0;
    cin >> x[1] >> y[1];
    x0 = x[1];
    y0 = y[1];
    x1 = x[1];
    y1 = y[1];
    for(int i=2;i<=n;i++) {
        cin >> x[i] >> y[i];
        S += (x1*y[i]-y1*x[i]);
        x1 = x[i];
        y1 = y[i];
    }
    S += (x1*y0-y1*x0);
    S=abs(S)/2;

求边界上的整数点的个数:

    ll sum = 0;
    for(int i=1;i<=n;i++){
       if(i<n){
        ll aa=abs(x[i+1]-x[i]);
        ll bb=abs(y[i+1]-y[i]);
        sum+=gcd(aa,bb)-1;
       }else{
        ll aa=abs(x[1]-x[n]);
        ll bb=abs(y[1]-y[n]);
        sum+=gcd(aa,bb)-1;
       }
    }
    sum+=n;
原文地址:https://www.cnblogs.com/lcsdsg/p/14352918.html