问题概述:输入一个多边形的所有顶点坐标(一定为整数),求出这个多边形内整点的数量、边缘上的点的数量、
多边形的面积(多边形顶点输入规则:从原点右边的第一个点开始到原点结束)
输入样例: 对应输出:
1 Scenario #1:
7 12 16 19.0
5 0
6 3
4 5
3 5
3 2
0 3
0 0
相似题:POJ 1265:Area
http://poj.org/problem?id=1265
皮克公式:S = a+b/2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积
多边形面积求法:
http://blog.csdn.net/jaihk662/article/details/51784898
#include
#include
typedef struct
{
double x;
double y;
}Point;
Point s[1005] = {0};
int Gcd(int a, int b)
{
if(a%b==0)
return b;
return Gcd(b, a%b);
}
int main(void)
{
int T, n, i, dx, dy, ans, t, cas;
double temp, sum;
scanf("%d", &T);
cas = 1;
while(T--)
{
scanf("%d", &n);
for(i=1;i<=n;i++)
scanf("%lf%lf", &s[i].x, &s[i].y);
sum = 0;
for(i=1;i<=n-2;i++)
{
temp = ((s[i].x-s[0].x)*(s[i+1].y-s[0].y)-(s[i].y-s[0].y)*(s[i+1].x-s[0].x))/2;
sum += temp;
}
ans = 0;
for(i=1;i<=n-1;i++)
{
dx = fabs(s[i].x-s[i+1].x);
dy = fabs(s[i].y-s[i+1].y);
if(dx==0)
ans += dy-1;
else if(dy==0)
ans += dx-1;
else
{
if(dx