Cod sursa(job #1139022)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 10 martie 2014 20:01:49
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

#define eps 0.001

const double co=0.5;
const double si=sqrt(3)/2;

bool mic(double d1,double d2)
{
    if (d1+eps<d2)
        return true;
    return false;
}

bool fless(pair <double,double> p1, pair <double,double> p2)
{
    if (mic(p1.first,p2.first))
        return true;
    if (mic(p1.second,p2.second))
        return true;
    return false;
}

int n,i,i1,k;
double x,y,xx1,yy1,xx2,yy2;
vector <pair <double,double> > v;

double xrot,yrot;
void rot(double xo,double yo,double x,double y)
{
    xrot=yrot=0;
    xrot=xo+(x-xo)*co-(y-yo)*si;
    yrot=yo+(x-xo)*si+(y-yo)*co;
}



int main(void)
{
    FILE * f;
    f=fopen("triang.in","r");
    ofstream g("triang.out");

    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
    {
        fscanf(f,"%lf%lf",&x,&y);
        v.push_back(make_pair(x,y));
    }

    sort(v.begin(),v.end(),&fless);

    for (i=0;i<n;i++)
        for (i1=i+1;i1<n;i1++)
        {
            xx1=v[i].first;
            yy1=v[i].second;
            xx2=v[i1].first;
            yy2=v[i1].second;
            rot(xx1,yy1,xx2,yy2);
            if ((lower_bound(v.begin(),v.end(),make_pair(xrot,yrot),&fless))!=(v.end()))
                k++;
        }

    g<<k/2;
    g.close();
    return 0;
}