Cod sursa(job #1843303)

Utilizator Bodo171Bogdan Pop Bodo171 Data 8 ianuarie 2017 16:08:27
Problema Patrate 3 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
typedef double ldouble;
const int mod=25357;
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;
}