Pagini recente » Cod sursa (job #2329418) | Cod sursa (job #1607147) | Cod sursa (job #150968) | Cod sursa (job #2965865) | Cod sursa (job #1396387)
#include <fstream>
#include <vector>
#include <cmath>
#define MOD 100013
using namespace std;
struct point{
int x,y;
}v[1005];
struct segment{
float angle;
float length;
point a,b;
};
long long int squaredist(point a,point b){
return 1LL*(a.x-b.x)*(a.x-b.x)+1LL*(a.y-b.y)*(a.y-b.y);
}
int Area(point p1,point p2,point p3){
return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);
}
vector <segment> H[MOD];
int N,nr;
int SquaresCount;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
void pars(int &a){
char s[20];
fin>>s;
int i=0,x=0,y=0,semn=1;
if(s[0]=='-')
semn=-1,i++;
while(s[i]>='0' && s[i]<='9'){
x=x*10+s[i]-'0';
i++;
}
i++;
while(s[i]>='0' && s[i]<='9'){
y=y*10+s[i]-'0';
i++;
}
x=x*semn;
if(x<0)
a=x*10000-y;
else
a=x*10000+y;
}
int main(){
fin>>N;
for(int i=1;i<=N;i++){
pars(v[i].x);
pars(v[i].y);
}
for(int i=1;i<N;i++)
for(int j=i+1;j<=N;j++){
segment x;
x.angle=(v[i].y-v[j].y)/(float)(v[i].x-v[j].x);
long long Length=1LL*squaredist(v[i],v[j]);
x.length=sqrt((float)Length);
x.a=v[i];
x.b=v[j];
int mod=Length%MOD;
for(int d=0;d<H[mod].size();d++)
if(x.angle==H[mod][d].angle && x.length==H[mod][d].length){
if(Length==min(squaredist(x.a,H[mod][d].a),squaredist(x.a,H[mod][d].b)))
SquaresCount++;
}
H[mod].push_back(x);
}
fout<<SquaresCount/2<<"\n";
}