poj 1265 Area 计算几何Pick定理 && poj 2954 Triangle

 

 POJ 1265 Area

                开始做的时候研究了好久,表示压力山大。后来表示,竟然有Pick定理 

          多边形S面积 = 多边形内部点数 + 边上的点数/2 -1;

          面积和边上的点数都为实数

          

#include
#include
#include
#include
#include
#include
using namespace std;
int cross(int x1,int x2,int y1,int y2)
{
    return x1*y2-x2*y1;
}
int Gcd( int a, int b )
{
    int r;  a=abs(a),b=abs(b);
    while( b!= 0 )
    {
        r= b;
        b= a % b;
        a= r;
    }
    return a;
}
int main()
{
    int i,j,k,ncase,n,tx,ty;
    int x,y,newx,newy,on,in;
    __int64 ans;
    cin>>ncase;
    k=0;
    while(ncase--)
    {
        k++;
        cin>>n;
        x=0,y=0,ans=0,on=0;
        for(i=0;i


  /*********************************************************************************/

POJ 2954 Traingle

        和上一题差不多,更简单了

        不过看了status  表示对那些能把内存压缩到12K的大牛们膜拜~~~~尝试了几次后始终164K,差距啊!!!

#include
using namespace std;
#include
#include
#include
int cross(int x1,int y1,int x2,int y2,int x3,int y3)
{
    return abs((x3-x1)*(y2-y1)-(x2-x1)*(y3-y1));
}
int Gcd( int a, int b )
{
    int r;  a=abs(a),b=abs(b);
    while( b!= 0 )
    {
        r= b;
        b= a % b;
        a= r;
    }
    return a;
}
int main()
{
    int i,j,newa,newb,a,b,on,in;
    int x[3],y[3];
    __int64 ans;
    while(scanf("%d%d%d%d%d%d",&x[0],&y[0],&x[1],&y[1],&x[2],&y[2]))
    {

        if(x[0]==0 && y[0]==0 && x[1]==0 && y[1]==0 && x[2]==0 && y[2]==0)
            return 0;
        ans=0,newa=0,newb=0,on=0,in=0;
        ans=cross(x[0],y[0],x[1],y[1],x[2],y[2]);
        on=Gcd(x[1]-x[0],y[1]-y[0])+Gcd(x[2]-x[1],y[2]-y[1])+Gcd(x[0]-x[2],y[0]-y[2]);
        if(ans<0)
            ans=-ans;                 ///叉积相乘是有正负滴 ,需全部转化为正的!!!
        in= ( ans- on+ 2 )/ 2;
        printf("%d\n",in);
    }
    return 0;
}


 

你可能感兴趣的:(ACM,计算几何)