Pagini recente » Cod sursa (job #730752) | Cod sursa (job #167052) | Cod sursa (job #1874066) | Cod sursa (job #870760) | Cod sursa (job #1170738)
#include <fstream>
#include <vector>
#define mod 10111
using namespace std;
ifstream fin ("patrate3.in");
ofstream fout ("patrate3.out");
struct point
{
int x,y;
}v[1001];
int cnt,n;
double a,b;
vector<int> H[mod];
point rotation (point A, point by)
{
A.x -= by.x;
A.y -= by.y;
swap (A.x,A.y);
A.x = - A.x;
A.x += by.x;
A.y += by.y;
return A;
}
bool hash_find (point A)
{
int h = 1LL*A.x*A.y%mod;
if (h < 0)
h += mod;
for (int i = 0; i<H[h].size(); ++i)
{
if (A.x == v[H[h][i]].x && A.y == v[H[h][i]].y)
return 1;
}
return 0;
}
int main()
{
fin>>n;
for (int i=1; i<=n; ++i)
{
fin>>a>>b;
a *= 100000;
b *= 100000;
v[i].x = a;
v[i].y = b;
if (v[i].x % 10 == 9)
v[i].x = v[i].x/10+1;
else v[i].x = v[i].x/10;
if (v[i].y % 10 == 9)
v[i].y = v[i].y/10+1;
else v[i].y = v[i].y/10;
int h = 1LL*v[i].x*v[i].y%mod;
if (h < 0)
h += mod;
H[h].push_back (i);
}
for (int i=1; i<=n; ++i)
for (int j=i+1; j<=n; ++j)
{
point Med;
Med.x = (v[i].x + v[j].x)/2;
Med.y = (v[i].y + v[j].y)/2;
point A = rotation (v[i],Med);
point B = rotation (v[j],Med);
if (hash_find (A) && hash_find(B))
++cnt;
}
fout<<cnt/2;
}