Cod sursa(job #1520670)

Utilizator Y0da1NUME JMECHER Y0da1 Data 9 noiembrie 2015 10:31:56
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <math.h>
#include <algorithm>
//#include <iostream>
using namespace std;
double laturi[1125751];
class punct
{
public:
    double x,y;
} v[1502];
int main()
{
    int i,j,l, mid, b, e, n, nr=0;
    double s;
    long approx;
    ifstream in ("triang.in");
    ofstream out ("triang.out");
    in>>n;
    l=n*(n-1)/2;
    for(i=0;i<n;i++)
        in>>v[i].x>>v[i].y;
    for(i=0;i<n-1;i++)
        for(j=i+1;j<n;j++)
        {
            approx=1000*sqrt((v[i].x-v[j].x) * (v[i].x-v[j].x) + (v[i].y-v[j].y) * (v[i].y-v[j].y));
            //cout<<approx<<endl;
            laturi[nr]=(double)approx/1000;
            nr++;
        }
    /*for(i=0;i<l;i++)
        cout<<laturi[i]<<" ";
        cout<<endl;*/
    sort(laturi, laturi+l);
    /*for(i=0;i<l;i++)
        cout<<laturi[i]<<" ";*/
    nr=0;
    for(i=1;i<n-1;i++)
        for(j=i+1;j<n;j++)
            if(max(laturi[i],laturi[j]) - min (laturi[i],laturi[j]) <=0.001)
            {
            s=(laturi[i]+laturi[j])/2;
            b=i; e=l-1;
            while(b<e)
                {
                    mid=(b+e)/2;
                    if(laturi[mid]<=s)
                        b=mid+1;
                    else
                        e=mid;
                    if(max(laturi[b],s) - min (laturi[b],s) <=0.001)
                        nr++;
                }
            }
    out<<nr;
    in.close();
    out.close();
    return 0;
}