poj 1265(网格)

来源:互联网 发布:影像测量软件 编辑:程序博客网 时间:2024/05/01 11:33

题目意思是:输入测试组数和m个点。计算这个点连成的线上的网格点的个数,还有多边形内网格点的个数及多边形面积。#include <iostream>#include<cstdio>#include<cstdlib>#include<cmath>using namespace std;struct point{int x,y;};int gcd(int v1,int v2){    while(v2)    {        int temp=v2;        v2=v1%v2;        v1=temp;    }    return v1;}int crossproduct(point a,point b){    return a.x*b.y-a.y*b.x;}int main(){    int n;    cin>>n;    for(int i=1;i<=n;i++)    {        int t;        cin>>t;        point p[105];        int Edgepoint=0;        int Innerpoint=0;        int Area=0;        p[0].x=0,p[0].y=0;        for(int j=1;j<=t;j++)        {            point temp;            cin>>temp.x>>temp.y;            p[j].x=p[j-1].x+temp.x;            p[j].y=p[j-1].y+temp.y;            Edgepoint+=gcd(abs(temp.x),abs(temp.y));            Area+=crossproduct(p[j-1],p[j]);        }        if(Area<0)Area=-Area;        Innerpoint=(int)(Area/2-Edgepoint/2+1);        printf("Scenario #%d:\n%d %d %.1f\n",i,Innerpoint,Edgepoint,(double(Area)/2));        if(i<n)        printf("\n");    }   // cout << "Hello world!" << endl;    return 0;}

0 0