https://ac.nowcoder.com/acm/contest/3003/D
牛牛得到了一个平面,这个平面上有 n 个不重合的点,第 i 个点的坐标为 (xi,yi)
牛牛想知道,这 n 个点形成的三角形中,总共有多少个钝角三角形。
题意:给n个点的坐标,判断有多少个钝角三角形,直接暴力每个三角形,用余弦定理判断是不是满足条件,注意三点共线的情况。
#include <bits/stdc++.h> //#include <cstdio> //#include <cmath> //#include <set> //#include <map> //#include <cstring> //#include <iostream> //#include <vector> //#include <queue> //#include <stack> //#include <algorithm> //#include <iterator> //#include <string> #define inf 0x3f3f3f3f #define INF 0x7fffffffffffffff typedef long long ll; const double PI=3.1415926535897931; const long long mod=1e9+7; const int MA= 1e7+10; const int ma= 2*1e5+10; const int few=1e3+10; using namespace std; ////////////////////////////////////////////// int main() { int n; int x[ma]; int y[ma]; cin>>n; for(int i=1; i<=n; i++) cin>>x[i]>>y[i]; ll ans=0; for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++) for(int k=j+1; k<=n; k++) { int len1=x[j]-x[i]; int len2=x[k]-x[i]; int len3=y[j]-y[i]; int len4=y[k]-y[i]; if(len1*len4==len2*len3) continue; ll a,b,c; a=len1*len1+len3*len3; b=(len2-len1)*(len2-len1)+(len4-len3)*(len4-len3); c=len2*len2+len4*len4; if(a>b+c||b>a+c||c>a+b) ans++; } cout<<ans<<endl; return 0; }