Pagini recente » Cod sursa (job #342292) | Borderou de evaluare (job #2236701) | Istoria paginii utilizator/xein | Cod sursa (job #654784) | Cod sursa (job #1615897)
#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 [ 1024 ] ;
struct muie {
double len ;
double x , y ;
};
muie q [ 1048576 ] ;
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 ;
}