Pagini recente » Cod sursa (job #472006) | Cod sursa (job #2290251) | Cod sursa (job #1218726) | Cod sursa (job #2330424) | Cod sursa (job #1843278)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long double ldouble;
const int mod=1099;
const ldouble eps=1e-5;
ldouble dist(ldouble X1,ldouble Y1,ldouble X2,ldouble Y2)
{
return((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2));
}
struct diagonala
{
ldouble d,xs,ys,x,y;
}el,newel;
vector<diagonala> v[mod];
ldouble X[1005],Y[1005],di[1005];
ldouble d1,d2;
int i,j,n,ans,key,ind,k;
void finds()
{
key=floor(el.d*100);
key%=mod;
for(ind=0;ind<v[key].size();ind++)
{
newel=v[key][ind];
d1=dist(X[i],Y[i],newel.x,newel.y);d2=dist(X[j],Y[j],newel.x,newel.y);
if(fabs(el.d-newel.d)<eps&&fabs(el.xs-newel.xs)<eps&&fabs(el.ys-newel.ys)<eps&&fabs(d1-d2)<eps)
{
ans++;
return;
}
}
}
void inserts()
{
key=floor(el.d*100);
key%=mod;
v[key].push_back(el);
}
int main()
{
ifstream f("patrate3.in");
ofstream g("patrate3.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>X[i]>>Y[i];
}
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
el.d=dist(X[i],Y[i],X[j],Y[j]);
el.xs=X[i]+X[j];
el.ys=Y[i]+Y[j];
el.x=X[i];
el.y=Y[i];
finds();
inserts();
}
g<<ans;
return 0;
}