题目
题意:给定二维上的一个三角形,给出它的三个坐标(都是正整数)。如果一个三角形,边上的点,不能在不经过三角形内部的点的情况下,连接上直线
y
=
0
y=0
y=0,则称该点为unsafe。求三角形所有unsafe的点组成的长度。
图源官方题解
思路:如果三角形上不存在与
y
=
0
y=0
y=0平行的边,我们可以发现,所有的点都可以连接到
y
=
0
y=0
y=0,且不会经过三角形内部的点。
如果三角形存在与
y
=
0
y=0
y=0平行的边,对于第三个点,如果它在该平行边的上方,那么我们发现,此时所有的点也可以连接到
y
=
0
y=0
y=0,且不会经过三角形内部的点。
如果三角形存在与
y
=
0
y=0
y=0平行的边,对于第三个点,如果它在该平行边的下方,这次,其他两条边可以连接
y
=
0
y=0
y=0,而平行边就刚好给挡住了,连接不上。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pdd pair<int, int>
const int maxn = 200010;
const int m = 3;
pdd p[m];
bool cmp(const pdd x, const pdd y) {
if (x.second == y.second) {
return x.first < y.first;
}
return x.second < y.second;
}
void solve() {
for (int i = 0; i < m; ++i) {
scanf("%d%d", &p[i].first, &p[i].second);
}
sort(p, p + m, cmp);
int ans = 0;
// 存在平行线,且在三角形的上方
if (p[1].second == p[2].second) {
ans += p[2].first - p[1].first;
}
printf("%d\n", ans);
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
solve();
}
}
/*
*/