数三角

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;
}

猜你喜欢

转载自www.cnblogs.com/Aracne/p/12274289.html