Cod sursa(job #3235970)

Utilizator alexvali23alexandru alexvali23 Data 24 iunie 2024 17:56:57
Problema Triang Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <cmath>
#include <set>

using namespace std;
const double EPS = 1e-5,
             c = 0.5,               /// cos(60)
             s = sqrt(3) / 2;       /// sin(60)

struct Punct
{
    double x, y;

    Punct(double xx = 0.0, double yy = 0.0)
    {
        x = xx, y = yy;
    }

    bool operator<(const Punct &A) const
    {
        if(abs(x - A.x) > EPS)
            return x < A.x;
        if(abs(y - A.y) > EPS)
            return y < A.y;
        return 0;
    }
};

set<Punct> S;

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

Punct rotire(const Punct &A, const Punct &B)
{
    double dx = B.x - A.x,
           dy = B.y - A.y;
    return Punct(dx * c - dy * s + A.x, dx * s + dy * c + A.y);
}

int main()
{
    int N,nrTr = 0;
    Punct A,M;
    f>>N;
    while(N--)
    {
        f>>A.x>>A.y;
        for(auto &B :S)
        {
            M = rotire(A,B);
            if(S.find(M)!=S.end())
                nrTr++;
        }
        S.insert(A);
    }
    g<<nrTr;
    return 0;
}