POJ 2954 Triangle

POJ 2954 Triangle


给你一个非退化的三角形,问其内部的整点个数。

PICK定理的直接应用版。。


简单多边形:

S : 面积

ON: 边上的整点数

IN: 内部整点数


S = ON/2 + IN - 1;

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>

using namespace std;
#define FOR(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define DOR(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)

#define oo 1e6
#define eps 1e-8
#define nMax 100000
#define pb push_back

#define F first
#define S second

#define bug puts("OOOOh.....");
#define zero(x) (((x)>0?(x):-(x))<eps)

#define LL long long
#define DB double

int gcd(int a,int b){
	return b==0?a:gcd(b,a%b);
}

int x[3],y[3];
int main(){
#ifndef ONLINE_JUDGE
	freopen("input.txt","r",stdin);
#endif
	while(1){
		int flag=0;
		for(int i=0;i<3;i++) {
			scanf("%d%d",&x[i],&y[i]);
			if(x[i]) flag++;
			if(y[i]) flag++;
		}
		if(flag==0) break;
		int s = (x[1]-x[0])*(y[2]-y[1])-(x[2]-x[1])*(y[1]-y[0]);
		if(s<0) s=-s;
		int on=0;
		for(int i=0;i<3;i++) {
			int d = gcd(x[(i+1)%3]-x[i],y[(i+1)%3]-y[i]);
			if(d<0) d=-d;
			on+=d;
		}
		int in=s-on+2;
		in/=2;
		printf("%d\n",in);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值