Pagini recente » Cod sursa (job #3226594) | Cod sursa (job #2204736) | Cod sursa (job #1171752) | Cod sursa (job #2987075) | Cod sursa (job #1303536)
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <vector>
using namespace std;
#define maxn 10001
#define mod 666013
#define err 10000
int n, answer=0;
vector<int> h[mod];
struct point
{
int x, y;
};
point p[maxn];
int get_hash(point m)
{
int ans;
ans=m.x%mod;
if (ans<0) ans=-ans;
return ans;
}
bool finder(point m)
{
int hh=get_hash(m), i;
for (i=0;i<h[hh].size();i++)
{
if (p[h[hh][i]].x==m.x && p[h[hh][i]].y==m.y) return true;
}
return false;
}
int main()
{
FILE *f=fopen("patrate3.in", "r");
ofstream g("patrate3.out");
int i, j;
point c, d, m;
int a, b;
fscanf(f, "%d\n",&n);
for (i=0;i<n;i++)
{
fscanf(f, "%d.%d ", &a, &b);
if (a>=0) p[i].x=(a*err+b);
else p[i].x=(a*err-b);
fscanf(f, "%d.%d\n", &a, &b);
if (a>=0) p[i].y=(a*err+b);
else p[i].y=(a*err-b);
h[get_hash(p[i])].push_back(i);
}
ifstream fu("patrate3.in");
fu>>n;
double x, y;
for (i=0;i<n;i++)
{
fu>>x>>y;
if (x<0 && x>-1) p[i].x=-p[i].x;
if (y<0 && y>-1) p[i].y=-p[i].y;
}
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{
m.x=(p[i].x+p[j].x)/2;
m.y=(p[i].y+p[j].y)/2;
c.x=-(p[i].y-m.y)+m.x;
c.y=(p[i].x-m.x)+m.y;
d.x=(p[i].y-m.y)+m.x;
d.y=-(p[i].x-m.x)+m.y;
if (finder(c)) if (finder(d)) answer++;
}
answer=answer/2;
g<<answer<<'\n';
}