Pagini recente » Cod sursa (job #2125591) | Cod sursa (job #267486) | Cod sursa (job #1447015) | Cod sursa (job #665667) | Cod sursa (job #1843299)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
typedef double ldouble;
const int mod=7919;
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<int> v[mod];
ldouble X[1005],Y[1005];
ldouble d1,d2;
int i,j,n,ans,key,ind,k,i11,j11,nr;
bool ok;
void finds()
{
key=floor(el.d);
key%=mod;
for(ind=0;ind<v[key].size();ind++)
{
i11=v[key][ind]/1000+1;j11=v[key][ind]%1000+1;
newel.d=dist(X[i11],Y[i11],X[j11],Y[j11]);
newel.xs=X[i11]+X[j11];
newel.ys=Y[i11]+Y[j11];
newel.x=X[i11];
newel.y=Y[i11];
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++;ok=1;
return;
}
}
}
void inserts()
{
key=floor(el.d);
key%=mod;
nr=(i-1)*1000+j-1;
v[key].push_back(nr);
}
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];
ok=0;
finds();
if(!ok) inserts();
}
g<<ans;
return 0;
}