计蒜客 多边形面积(pick定理模板题)

来源:互联网 发布:ps 保留图层导入Ai mac 编辑:程序博客网 时间:2024/06/03 16:36

题目链接:https://www.jisuanke.com/course/615/28223

题目思路:将各个点的坐标按照顺序储存起来,然后再利用分解三角形的方法存储多边形的面积,再利用gcd求解边上点的个数,最后用pick定理求解图形内点的个数

学到的东西:



代码:

#include <bits/stdc++.h>using namespace std;int gcd(int a,int b){    if(b==0) return a;    return gcd(b,a%b);}struct Point{    double x;    double y;}p[200];double cross(Point a,Point b,Point o){    return (a.x-o.x)*(b.y-o.y)-(b.x-o.x)*(a.y-o.y);}double area(int n){    double res=0.0;    for(int i=0;i<n-1;i++)       res+=cross(p[i],p[i+1],p[0]);    return res/2.0;}int main(){    int n;cin>>n;    double x=0,y=0;    double in=0;    double inin=0;    for(int i=0;i<n;i++){        double xx,yy;        cin>>xx>>yy;        if(xx==0||yy==0){            in+=abs(xx)/1+abs(yy)/1;        }        else in+=gcd(abs(xx),abs(yy));        p[i].x=xx+x,p[i].y=yy+y;        x=p[i].x,y=p[i].y;    }    inin=area(n+1)+1-in/2;    printf("%.0f %.0f %.1f",inin,in,area(n+1));}


原创粉丝点击