zoukankan      html  css  js  c++  java
  • hdu 1705 Count the grid(皮克定理)

    题目链接:hdu 1705 Count the grid

    题意:

    给定一个三角形三点坐标,问三角形内有多少个坐标均为整数的点。

    题解:

    给定顶点坐标均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积 S 和内部
    格点数目 n、边上格点数目 s 的关系:S = n +s/2+1

    三角形两向量叉积/2=面积。

    向量上整数点数为gcd(v.x,v.y)(此公式对于一条边上的结果不准确,但是三条边加在一起的和是准确的)

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 using namespace std;
     4 
     5 struct point
     6 {
     7     int x,y;
     8     point(){}
     9     point(int _x,int _y):x(_x),y(_y){}
    10     point operator -(point b){return point(x-b.x,y-b.y);}
    11 }p[3];
    12 
    13 int cross(point a,point b){return a.x*b.y-b.x*a.y;}
    14 
    15 int main()
    16 {
    17     while(~scanf("%d%d%d%d%d%d",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y))
    18     {
    19         if(!p[0].x&&!p[0].y&&!p[1].x&&!p[1].y&&!p[2].x&&!p[2].y)break;
    20         int tmp=0;
    21         F(i,0,2)
    22         {
    23             point t=p[(i+1)%3]-p[i];
    24             tmp+=__gcd(abs(t.x),abs(t.y));
    25         }
    26         int s=abs(cross(p[2]-p[0],p[1]-p[0]));
    27         printf("%d
    ",(s-tmp+2)/2);
    28     }
    29     return 0;
    30 }
    View Code
  • 相关阅读:
    2019年春季学期第三周作业
    2019年春季学期第二周作业
    7-2 求最大值及其下标 (20 分)
    7-1 查找整数 (10 分)
    人生中最重要的三位老师
    自我介绍
    学期总结
    编程作业 抓老鼠啊~亏了还是赚了?
    作业——10
    作业——9
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6502695.html
Copyright © 2011-2022 走看看