Pagini recente » Cod sursa (job #1863836) | Cod sursa (job #400155) | Cod sursa (job #2155981) | Cod sursa (job #410253) | Cod sursa (job #1615462)
#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 ] ;
struct muie {
double len ;
double x , y ;
};
muie q [ MAX * MAX ] ;
long long pl[MAX * MAX];
struct cmp {
inline bool operator () ( long long a , long long b )
{
return a < b;
}
};
long long func(double A, int c) {
double frac = A * (sqrt(5)-1)*0.5;
frac -= floor(A * (sqrt(5)-1)*0.5);
frac *= c;
return (long long)frac ;
}
int main()
{
int t = 1 ;
while ( t -- ){
int n ;
cin >> n ;
FORN ( i , 1 , n )
{
cin >> a [ i ].first >> a [ i ].second ;
}
const double A = (sqrt(5) - 1) / 2;
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 ) ;
long long nr = func(q[cate].x, 696969);
nr += func(q[cate].y, 666777);
nr += func(q[cate].len, 232004);
pl[cate] = nr;
}
}
sort ( pl + 1 , pl + cate + 1 , cmp ()) ;
long long ans = 0 ;
long long len = 0 ;
FORN ( i , 1 , cate )
{
int j = i ;
while ( j <= cate and pl[j] == pl[i]) ++j;
len = j - i ;
i = j - 1 ;
ans = ans + len * ( len - 1 ) / 2 ;
}
cout << ans << "\n";
}
return 0 ;
}