#include <cstdlib>
#include <iostream>
#define X 0
#define Y 1
using namespace std;
typedef int pointi[2];
int AreaSign(pointi a, pointi b, pointi c)
{
double x1 = b[X]-a[X], x2 = c[X]-a[X],
y1 = b[Y]-a[Y], y2 = c[Y]-a[Y];
double area2 = x1*y2 - x2*y1 ;
int res = area2 == 0 ? 0 : (area2 > 0 ? 1 : -1);
return res;
}
bool Left(pointi a, pointi b, pointi c)
{
return AreaSign(a, b, c) > 0;
}
/**
return vlaue meaning:
0: right
-1: obtuse
1: acute
**/
int Angle(pointi a, pointi b, pointi c)
{
pointi d; int rev = 1;
if (Left(a, b, c))
{
d[X] = a[X] - b[Y] + a[Y];
d[Y] = a[Y] + b[X] - a[X];
rev = -1;
}
else
{
d[X] = a[X] + b[Y] - a[Y];
d[Y] = a[Y] - b[X] + a[X];
}
int r = rev*AreaSign(a, d, c);
return r;
}
void Judge(pointi a, pointi b, pointi c)
{
if (AreaSign(a, b, c) == 0)
{
cout<<"not a triangle"<<endl;
return;
}
int angle;
int A = Angle(a, b, c), B = Angle(b, c, a), C = Angle(c, a, b);
if (A == -1 || B == -1 || C==-1) angle = -1;
else if (A == 0 || B==0 || C==0) angle = 0;
else angle = 1;
bool isosceles=false;
int a2 = (b[X]-c[X])*(b[X]-c[X]) + (b[Y]-c[Y])*(b[Y]-c[Y]),
b2 = (a[X]-c[X])*(a[X]-c[X]) + (a[Y]-c[Y])*(a[Y]-c[Y]),
c2 = (b[X]-a[X])*(b[X]-a[X]) + (b[Y]-a[Y])*(b[Y]-a[Y]);
if (a2 == b2 || a2 == c2 || c2 == b2 ) isosceles = true;
if (isosceles) cout<<"isosceles ";
else cout<<"scalene ";
if (angle == 0) cout<<"right ";
else if (angle == 1) cout<<"acute ";//锐角
else cout<<"obtuse ";//钝角
cout<<"triangle"<<endl;
}
int main(int argc, char *argv[])
{
int t = 1;
int n;
pointi a, b, c;
cin>>n;
for (int i = 1; i <= n; i++)
{
cin>>a[X]>>a[Y]>>b[X]>>b[Y]>>c[X]>>c[Y];
cout<<"Case #"<<i<<": ";
Judge(a, b, c);
}
}
Google code jam 2008 beta A Triangle Trilemma
最新推荐文章于 2019-12-31 19:51:02 发布