Cod sursa(job #1615448)

Utilizator xtreme77Patrick Sava xtreme77 Data 26 februarie 2016 16:21:06
Problema Patrate 3 Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <fstream>
#include <algorithm>

using namespace std;

# define pb push_back
# define mp make_pair
# define FORN( a , b , c ) for ( int a = b ; a <= c ; ++ a )
# define FORNBACK( a , b , c ) for ( int a = b ; a >= c ; -- a )

const int MAX = 1e3 + 14 ;

ifstream cin ( "patrate3.in" ) ;
ofstream cout ( "patrate3.out" ) ;

pair < double , double > a [ MAX ] ;

double _fabs(double x) {
    if (x > 0)
        return x;
    return -x;
}

struct muie {
    double len ;
    double x , y ;
};

muie q [ MAX * MAX ] ;

struct cmp {
    inline bool operator () ( muie a , muie b )
    {
        if ( _fabs ( a.len - b.len ) < 0.00001 ) {
            if ( _fabs ( a.x - b.x ) < 0.00001 ) {
                return a.y - b.y < -0.00001;
            }
            return a.x - b.x < -0.00001 ;
        }
        return a.len - b.len < -0.00001  ;
    }
};

int main()
{
    int t = 1 ;
    while ( t -- ){
    int n ;
    cin >> n ;
    FORN ( i , 1 , n )
    {
        cin >> a [ i ].first >> a [ i ].second ;
    }
    int cate = 0 ;
    FORN ( i , 1 , n )
    {
        FORN ( j , 1 , i - 1 )
        {
            ++ cate ;
            q [ cate ].x = ( a [ i ].first + a [ j ].first ) ;
            q [ cate ].y = ( a [ i ].second + a [ j ].second ) ;
            q [ cate ].len = ( a [ i ].first - a [ j ].first ) * ( a [ i ].first - a [ j ].first ) +
                             ( a [ i ].second - a [ j ].second ) * ( a [ i ].second - a [ j ].second ) ;
        }
    }
    sort ( q + 1 , q + cate + 1 , cmp ()) ;
    long long ans = 0 ;
    long long len = 0 ;
    FORN ( i , 1 , cate )
    {
        int j = i ;
        while ( j <= cate and _fabs ( q [ j ].len - q [ i ].len ) < 0.00001 and _fabs ( q [ j ].x - q [ i ].x ) < 0.00001 and _fabs ( q [ j ].y - q [ i ].y ) < 0.00001 ) ++ j ;
        len = j - i ;
        i = j - 1 ;
        ans = ans + len * ( len - 1 ) / 2 ;
    }
    cout << ans << "\n";
    }
    return 0 ;
}