题号
A - Triangles
签到题。
给出坐标系中的三个格点,判断是否能够构成三角形,如果能,判断此三角形的类型(锐角/直角/钝角)。
排除不能构成三角形的情况,判断三角形类型则利用勾股定理比较a²+b²与c²的大小即可。
不能构成三角形的情况无非两种:
- 两点共线
- 两点重合
如果用斜率判断共线,注意特判直线平行于y轴,即斜率不存在的情况。
Ac代码:
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
int main (void)
{
int t;
cin >> t;
while (t--)
{
double l[4] , k1 , k2;
int flag = 1;
pair<double , double> p1 , p2 , p3;
cin >> p1.x >> p1.y >> p2.x >> p2.y >> p3.x >> p3.y;
if(p1.x == p2.x && p1.x == p3.x || p1.y == p2.y && p1.y == p3.y)
flag = 0;
else if (p1.x==p2.x&&p1.y==p2.y||p1.x==p3.x&&p1.y==p3.y||p2.x==p3.x&&p2.y==p3.y)
flag = 0;
k1 = (p2.y-p1.y) / (p2.x-p1.x);
k2 = (p3.y-p2.y) / (p3.x-p2.x);
if (k1 == k2)
flag = 0;
l[0] = sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y));
l[1] = sqrt((p3.x-p2.x)*(p3.x-p2.x) + (p3.y-p2.y)*(p3.y-p2.y));
l[2] = sqrt((p3.x-p1.x)*(p3.x-p1.x) + (p3.y-p1.y)*(p3.y-p1.y));
sort(l,l+3);
double l1 = l[0] , l2 = l[1] , l3 = l[2];
double s = l1 * l1 + l2 * l2 , q = l3 * l3;
// cout << l1 << " " << l2 << " " << l3 << endl;
if (!flag)
cout << "invalid";
else if (abs(s - q) < 1e-6