Cod sursa(job #1615885)

Utilizator xtreme77Patrick Sava xtreme77 Data 26 februarie 2016 22:13:35
Problema Patrate 3 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <fstream>
#include <algorithm>
#include <unordered_map>

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 ] ;

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  ;
    }
};

unordered_map < unsigned long long , int > H ;

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 ;
    unsigned long long aa ;
    unsigned long long bb ;
    unsigned long long cc ;
    FORN ( i , 1 , n )
    {
        FORN ( j , 1 , i - 1 )
        {
            aa = ( a [ i ].first + a [ j ].first ) ;
            bb = ( a [ i ].second + a [ j ].second ) ;
            cc = ( a [ i ].first - a [ j ].first ) * ( a [ i ].first - a [ j ].first ) +
                             ( a [ i ].second - a [ j ].second ) * ( a [ i ].second - a [ j ].second ) ;
            H [ ( (aa * 69LL + bb ) * 666013LL + cc ) * 700001LL ] ++ ;
        }
    }

    //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 ;
    }*/
    for ( auto x : H )
       ans = ans + 1LL * x.second * ( x.second - 1 ) / 2 ;
    cout << ans << "\n";
    }
    return 0 ;
}