Cod sursa(job #1615441)

Utilizator xtreme77Patrick Sava xtreme77 Data 26 februarie 2016 16:14:34
Problema Patrate 3 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <bits/stdc++.h>

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 ;

pair < double , double > a [ MAX ] ;

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

muie q [ MAX * MAX ] ;

inline bool cmp ( 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()
{
    ios :: sync_with_stdio ( false ) ;

    freopen( "patrate3.in" , "r" , stdin ) ;
    freopen( "patrate3.out" , "w" , stdout ) ;
    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 = 1LL * ( a [ i ].first - a [ j ].first ) * ( a [ i ].first - a [ j ].first ) +
                             1LL * ( 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 ;
}