给你一个非退化的三角形,问其内部的整点个数。
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;
}