Cod sursa(job #2839501)

Utilizator AswVwsACamburu Luca AswVwsA Data 26 ianuarie 2022 00:17:11
Problema Triang Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <map>
using namespace std;

ifstream cin("triang.in");
ofstream cout("triang.out");

const int NMAX = 1503;
pair <double, double> v[NMAX];
multimap <double, int> mult[NMAX];

double dist(pair <double, double> a, pair <double, double> b)
{
    return (a.first - b.first) * (a.first - b.first) +
            (a.second - b.second) * (a.second - b.second);
}

multimap <double, int> :: iterator it, it2, it3;

const double Ep = 0.001;

bool egal(double a, double b)
{
    return abs(a - b) < Ep;
}
int main()
{
    int n, i, j;
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> v[i].first >> v[i].second;
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j < i; j++)
            mult[i].insert({dist(v[i], v[j]), j});
        for (j = i + 1; j <= n; j++)
            mult[i].insert({dist(v[i], v[j]), j});
    }
    int ans = 0;
    for (i = 1; i <= n; i++)
        for (it = mult[i].begin(); it != mult[i].end(); it++)
        {
            it2 = mult[i].lower_bound(it->first);
            it2++;
            double val1 = it2->first, val2 = it2->second;
            //cout << it2->first << " " << it2->second << "\n";
            if (it2 == mult[i].end() or !egal(it2->first, it->first))
                continue;
            it3 = mult[i].upper_bound(it2->first);
            double val3 = it3->first, val4 = it3->second;
            for (;it2 != it3; it2++)
                if (egal(dist(v[it->second], v[it2->second]),it->first))
                    ans++;
            //cout << it->first << " " << it->second << "\n";
        }
    cout << ans / 3;
}