E-等腰三角形(easy)_牛客小白月赛69 (nowcoder.com)
这道题要保证点不重复,并且要保证三点不在一条直线上,所以可以用向量来做。
还有一个小知识,如果两个线段相等并且不共线,那么这两个线段端点一定可以构成三角形。
向量判断的知识:
由两点判断两条直线垂直 :(x2 - x1)(x3 - x1) + (y2 - y1)(y3 - y1) = 0
平行 :(x2 - x1)(y3-y1) == (x3 - x1)(y2-y1)
代码如下:
#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int N = 1e5 + 10;
int x[N], y[N];
int dis(int i, int j)
{
return (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(nullptr);
int n; cin >> n;
for (int i = 1; i <= n; i++)
cin >> x[i] >> y[i];
int ans = 0;