Cod sursa(job #1446314)

Utilizator crysstyanIacob Paul Cristian crysstyan Data 1 iunie 2015 14:22:38
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
#include <set>
#include <cmath>
#define NMAX 1501
#define eps 0.001

using namespace std;

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

int n, i, j, rez=0;
double sqrt3=sqrt(3);

struct punct
{
    double xx, yy;
};
punct v[NMAX], p1, p2;
set <punct> m;

bool egale(double a, double b)
{
    double e=a-b;
    if (e<0) e=-e;
    if (e<eps) return 1;
    return 0;
}

bool cmp(punct a, punct b)
{
    if (egale(a.xx,b.xx)) return a.yy<b.yy;
    return a.xx<b.xx;
}

int main()
{
    f>>n;

    for (i=1; i<=n; ++i)
            f>>v[i].xx>>v[i].yy;

    sort(v+1,v+n+1,cmp);

    for (i=1; i<=n-1; ++i)
        for (j=i+1; j<=n; ++j)
    {
        p1.xx=v[i].xx+v[j].xx+(v[i].yy-v[j].yy)*sqrt3;
        p1.yy=v[i].yy+v[j].yy+(v[j].xx-v[i].xx)*sqrt3;
        p2.xx=v[i].xx+v[j].xx+(v[j].yy-v[i].yy)*sqrt3;
        p2.yy=v[i].yy+v[j].yy+(v[i].xx-v[j].xx)*sqrt3;

        for (int k=1; k<=n; ++k)
        {
            if (v[k].xx>p1.xx && v[k].xx>p2.xx) break;
            if (egale(v[k].xx,p1.xx) && egale(v[k].yy,p1.yy)) rez++;
            if (egale(v[k].xx,p2.xx) && egale(v[k].yy,p2.yy)) rez++;
        }
    }

    g<<rez<<'\n';
    return 0;
}