Pagini recente » Cod sursa (job #3361675) | Cod sursa (job #3361764) | Cod sursa (job #3361446) | Cod sursa (job #3361482) | Cod sursa (job #3361448)
#include <bits/stdc++.h>
#define ld double
#define eps ((ld)1e-8)
//#pragma GCC optimize("O1")
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
struct Point{
ld x,y;
bool operator<(const Point &p1) const{
if(p1.x != x ) return x< p1.x;
return y + eps < p1.y;
}
bool operator !=(const Point &p1) const{
return p1.x != x || p1.y != y;
}
};
ostream & operator<<(ostream & f, const Point &p1){
f << "(" << p1.x << " , " << p1.y << ")";
return f;
}
struct Dia{
Point mid;
ld m;
ld len;
Dia(const Point &p1, const Point &p2)
{
mid = {(p1.x+ p2.x) / 2, (p1.y + p2.y) / 2};
ld dx = p1.x - p2.x;
ld dy = p1.y - p2.y;
m = dy / dx;
len = dx * dx + dy * dy;///nu ma intersesaza exact sqrt, sunt golan
}
Dia(Point p1, ld m1, ld l1){
mid = p1;
m = m1;
len = l1;
}
bool operator <(const Dia &d1) const{
if(mid != d1.mid) return mid < d1.mid;
if(m + eps!= d1.m) return m + eps < d1.m;
return len + eps < d1.len;
}
Dia inv() const {
return Dia(mid, -1/m, len);
}
};
//ostream & operator<<(ostream & x, const Dia & d){
// x << "{ "<< d.mid << ", " << d.dx << "/" << d.dy << ", "<<d.len << " }";
// return x;
//}
int N;
vector <Point> a;
map <Dia, short int> freq;
long long ans = 0;
void read()
{
fin >> N;
a.resize(N);
for(int i=0;i<N;i++){
fin >> a[i].x >> a[i].y;
}
}
void solve()
{
for(int i=0;i<N;i++){
for(int j= 0;j < i;j++){
Dia d(a[i], a[j]);
freq[d]++;
}
}
for(auto [d,cnt] : freq){
auto it = freq.find(d.inv());
if(it != freq.end()){
ans += 1ll * it->second * cnt;
}
}
ans /=2;
}
void write()
{
fout << ans;
}
int main()
{
read();
solve();
write();
}