Cod sursa(job #2440050)

Utilizator bluestorm57Vasile T bluestorm57 Data 17 iulie 2019 14:46:30
Problema Triang Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("triang.in");
ofstream g("triang.out");

const int NMAX = 1505;
vector < pair < double, double > > v;
int n;
struct mat{
    double leng;
    int id;
} dist[NMAX][NMAX];
double cdist[NMAX][NMAX];
int ans;
bool viz[NMAX][NMAX];

double pow(double X){
    return X * X;
}

double distance(pair <double, double> X, pair <double, double> Y){
    return sqrt(pow(X.first - Y.first) + pow(X.second - Y.second));
}

bool cmp(const mat &X, const mat &Y){
    return X.leng < Y.leng;
}

double modul(double X){
    return max(X, -X);
}

bool egal(double X, double Y){
    return modul(X - Y) < 0.0001;
}

int main(){
    int i,j;
    f >> n;
    v.resize(n);
    for(i = 0 ; i < n ; i++)
        f >> v[i].first >> v[i].second;

    for(i = 0 ; i < n ; i++)
        for(j = i + 1 ; j < n ; j++){
            viz[i][j] = 1;
            dist[i][j].leng = distance(v[i], v[j]);
            cdist[i][j] = dist[i][j].leng;
            dist[i][j].id = j;
        }
    for(i = 0 ; i < n ; i++)
        sort(dist[i], dist[i] + n, cmp);

    for(i = 0 ; i < n ; i++){
        for(j = 0 ; j < n - 1; j++){
            if(!egal(dist[i][j].leng, 0) &&  egal(dist[i][j].leng, dist[i][j + 1].leng)&& (egal(cdist[dist[i][j + 1].id][dist[i][j].id], dist[i][j].leng) || egal(cdist[dist[i][j].id][dist[i][j + 1].id], dist[i][j].leng)))
                ans++;
        }
    }

    g << ans;

    return 0;
}