Cod sursa(job #838562)

Utilizator SteveStefan Eniceicu Steve Data 19 decembrie 2012 22:31:22
Problema Triang Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <algorithm>
#include <cmath>
#define mp(a,b) make_pair (a, b)
#define x first
#define y second

using namespace std;

typedef pair <double, double> pr;

int N;
double sq = sqrt (3.0) / 2;
pr v[1511];

bool cmp (pr a, pr b)
{
    if (fabs (a.x - b.x) < 1e-5)
    {
        if (fabs (a.y - b.y) < 1e-5) return 0;
        return a.y < b.y;
    }
    return a.x < b.x;
}

void Citire ()
{
    ifstream fin ("triang.in");
    fin >> N;
    for (int i = 0; i < N; i++)
        fin >> v[i].x >> v[i].y;
    fin.close ();
    sort (v, v + N, cmp);
}

pr Aflare_Coord1 (pr a, pr b)
{
    pr rasp;
    rasp.x = 0.5 * (a.x + b.x) - sq * (b.y - a.y);
    rasp.y = 0.5 * (a.y + b.y) + sq * (b.x - a.x);
    return rasp;
}

pr Aflare_Coord2 (pr a, pr b)
{
    pr rasp;
    rasp.x = 0.5 * (a.x + b.x) + sq * (b.y - a.y);
    rasp.y = 0.5 * (a.y + b.y) - sq * (b.x - a.x);
    return rasp;
}

int Business ()
{
    int cnt = 0;
    for (int i = 0; i < N; i++)
    {
        for (int j = i + 1; j < N; j++)
        {
            if (binary_search (v, v + N, Aflare_Coord1 (v[i], v[j]), cmp)) cnt++;
            if (binary_search (v, v + N, Aflare_Coord2 (v[i], v[j]), cmp)) cnt++;
        }
    }
    return cnt / 3;
}

void Scriere ()
{
    ofstream fout ("triang.out");
    fout << Business ();
    fout.close ();
}

int main ()
{
    Citire ();
    Scriere ();
    return 0;
}