• pick定理:面积=内部整数点数+边上整数点数/2-1


     1 //pick定理:面积=内部整数点数+边上整数点数/2-1
     2 // POJ 2954
     3 
     4 #include <iostream>
     5 #include <cstdio>
     6 #include <cstdlib>
     7 #include <algorithm>
     8 #include <vector>
     9 #include <math.h>
    10 using namespace std;
    11 #define LL long long
    12 typedef pair<int,int> pii;
    13 const double inf = 0x3f3f3f3f;
    14 const LL MOD =100000000LL;
    15 const int N =110;
    16 #define clc(a,b) memset(a,b,sizeof(a))
    17 const double eps = 1e-8;
    18 void fre() {freopen("in.txt","r",stdin);}
    19 void freout() {freopen("out.txt","w",stdout);}
    20 inline int read() {int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;}
    21 
    22 int sgn(double x){
    23     if(fabs(x) < eps)return 0;
    24     if(x < 0)return -1;
    25     else return 1;
    26 }
    27 
    28 struct Point{
    29     int x,y;
    30     Point(){}
    31     Point(int _x,int _y){
    32         x = _x;y = _y;
    33     }
    34     Point operator -(const Point &b)const{
    35         return Point(x - b.x,y - b.y);
    36     }
    37     int operator ^(const Point &b)const{
    38         return x*b.y - y*b.x;
    39     }
    40     int operator *(const Point &b)const{
    41         return x*b.x + y*b.y;
    42     }
    43     friend bool operator<(const Point &a,const Point &b){
    44         if(fabs(a.y-b.y)<eps) return a.x<b.x;
    45         return a.y<b.y;
    46     }
    47 };
    48 
    49 int area(Point a,Point b,Point c){
    50     return fabs((a-c)^(b-c));
    51 }
    52 //求多边形边上整点的数目,顶点必须为整数点
    53 int fun(Point a,Point b){
    54     int x,y;
    55     x=abs(a.x-b.x);
    56     y=abs(a.y-b.y);
    57     return __gcd(x,y); 
    58 }
    59 int main(){
    60     // fre();
    61     int x1,y1,x2,y2,x3,y3;
    62     while(~scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3),x1||x2||x3||y1||y2||y3){
    63         int ans=area(Point(x1,y1),Point(x2,y2),Point(x3,y3));
    64         int cnt=0;
    65         Point a,b,c;
    66         a=Point(x1,y1);
    67         b=Point(x2,y2);
    68         c=Point(x3,y3);
    69         cnt+=fun(a,b);
    70         cnt+=fun(a,c);
    71         cnt+=fun(b,c);
    72         printf("%d
    ",(ans-cnt)/2+1);
    73     }
    74     return 0;
    75 }
  • 相关阅读:
    [LeetCode] Majority Element II
    [Nginx] 事件模型
    [Nginx] 进程模型
    [C++] 函数中的字符串指针与数组
    [LeetCode] Shortest Distance to a Character
    [LeetCode] Number of Lines To Write String
    Ubuntu 16.04中安装谷歌Chrome浏览器
    Python、机器学习、计算机视觉、深度学习入门
    Sublime安装与配置
    [20160807][系统设计的三次迭代]
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5897445.html
Copyright © 2020-2023  润新知