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;
}