Cod sursa(job #1401978)

Utilizator ThomasFMI Suditu Thomas Thomas Data 26 martie 2015 11:27:20
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <map>
using namespace std;

#define NMax 1505
#define X first
#define Y second
#define r3 0.86602540378443864676372317075294

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

pair<double,double> P[NMax],u;
map< pair<double,double> , int> Hash;

int sol;

void calc(pair<double,double> A, pair<double,double> B)
{
    pair<double,double> C,D;
    C.X = (A.X + B.X) / 2 + (A.Y - B.Y) * r3;
    D.X = (A.X + B.X) / 2 + (B.Y - A.Y) * r3;
    C.Y = (A.Y + B.Y) / 2 + (A.X - B.X) * r3;
    D.Y = (A.Y + B.Y) / 2 + (B.X - A.X) * r3;

    u.X = (int)(C.X*100) / 100.0;
    u.Y = (int)(C.Y*100) / 100.0;
    if(Hash.find(u) != Hash.end()) ++sol;

    u.X = (int)(D.X*100) / 100.0;
    u.Y = (int)(D.Y*100) / 100.0;
    if(Hash.find(u) != Hash.end()) ++sol;
}

int n;

int main()
{
    int i,j;

    int cod = 0;

    f>>n;
    for(i=1;i<=n;++i)
    {
        f>>P[i].X>>P[i].Y;
        for(j=-1;j<=1;++j)
        {
            u.X = (int)(P[i].X*100+j) / 100.0;
            u.Y = (int)(P[i].Y*100+j) / 100.0;
            Hash[u] = ++cod;
        }
    }

    for(i=1;i<n;++i) for(j=i+1;j<=n;++j) calc(P[i],P[j]);

    g<<sol<<"\n";

    return 0;
}