Cod sursa(job #3200863)

Utilizator not_anduAndu Scheusan not_andu Data 5 februarie 2024 21:56:41
Problema Triang Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("03")

using namespace std;

#define INFILE "triang.in"
#define OUTFILE "triang.out"

typedef long double ld;

const ld EPS = 0.0001;

struct Point {

    ld x;
    ld y;

    Point() : x(0), y(0) {}
    Point(ld _x, ld _y) : x(_x), y(_y) {}

};

int n;
vector<Point> v;

ld getDistance(Point &a, Point &b){
    return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}

bool equalDistances(ld &distance1, ld &distance2){
    return (distance1 - EPS <= distance2 && distance2 <= distance1 + EPS);
}

bool equilateralTriangle(ld &distance1, ld &distance2, ld &distance3){
    return equalDistances(distance1, distance2) &&
           equalDistances(distance2, distance3) &&
           equalDistances(distance3, distance1);
}

void solve(){

    cin >> n;
    v.resize(n);

    for(int i = 0; i < n; ++i){
        cin >> v[i].x >> v[i].y;
    }

    int ans = 0;

    for(int i = 0; i < n; ++i){
        for(int j = i + 1; j < n; ++j){
            if(i != j){
                ld distance1 = getDistance(v[i], v[j]);
                for(int k = j + 1; k < n; ++k){
                    if(k != i && k != j){
                        ld distance2 = getDistance(v[j], v[k]);
                        ld distance3 = getDistance(v[k], v[i]);
                        if(equilateralTriangle(distance1, distance2, distance3)) ++ans;
                    }
                }
            }
        }
    }

    cout << ans << '\n';

}

int main(){
    ios_base::sync_with_stdio(false);
    freopen(INFILE, "r", stdin);
    freopen(OUTFILE, "w", stdout);
    cin.tie(0), cout.tie(0);
    solve();
    return 0;
}