poj 2954 Pick公式的应用,三角形与整点的关系(存在一个GCD的关系)

PICK 公式: S=e/2+i-1 S为多边形面积 i 为多边形内部的格点数,e为多边形边上的格点数

http://acm.pku.edu.cn/JudgeOnline/problem?id=2954

 
  
#include < stdio.h >
#include
< string .h >
#include
< iostream >
using namespace std;
typedef
double TYPE;
// 空间中的点,可以用来作为二维点来用
struct POINT { /* 验证 */
TYPE x; TYPE y; TYPE z;
POINT() : x(
0 ), y( 0 ), z( 0 ) {};
POINT(TYPE _x_, TYPE _y_, TYPE _z_
= 0 )
: x(_x_), y(_y_), z(_z_) {};
// 要用 G++ 提交 ,可以不用这个
POINT operator = ( const POINT & A){
x
= A.x;
y
= A.y;
z
= A.z;
}
};
double gcd( int x, int y)
{
if (y == 0 ) return x;
return gcd(y,x % y);
}
inline
int ABS( int x)
{
return x > 0 ? x: - x;
}
int TrianglePoint( const POINT * p)
{
int x1,x2,x3,y1,y2,y3,AA,e,ans; // AA means double area

x1
= ( int )p[ 0 ].x; y1 = ( int )p[ 0 ].y;
x2
= ( int )p[ 1 ].x; y2 = ( int )p[ 1 ].y;
x3
= ( int )p[ 2 ].x; y3 = ( int )p[ 2 ].y;
int dx12 = ABS(x1 - x2);
int dx13 = ABS(x1 - x3);
int dx23 = ABS(x2 - x3);
int dy12 = ABS(y1 - y2);
int dy13 = ABS(y1 - y3);
int dy23 = ABS(y2 - y3);
AA
= ABS((x1 - x2) * (y2 - y3) - (x2 - x3) * (y1 - y2));
e
= gcd(dx12,dy12) + gcd(dx13,dy13) + gcd(dx23,dy23);
ans
= (AA + 2 - e) / 2 ;
return ans;

}
int main(){
POINT p[
3 ];
while (cin >> p[ 0 ].x >> p[ 0 ].y >> p[ 1 ].x >> p[ 1 ].y >> p[ 2 ].x >> p[ 2 ].y){
// 刚开始写成 a+b+c+d+e+f==0 的形式,一直 WA,原因是有负数
if ( p[ 0 ].x == 0 && p[ 0 ].y == 0 && p[ 1 ].x == 0 && p[ 1 ].y == 0 && p[ 2 ].x == 0 && p[ 2 ].y == 0 )
break ;
int ans = TrianglePoint(p);
cout
<< ans << endl;
}
return 0 ;
}

转载于:https://www.cnblogs.com/laipDIDI/articles/2041618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值