Cod sursa(job #3222171)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 9 aprilie 2024 10:18:15
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.84 kb
#include <fstream>
#include <algorithm>
#define x first
#define y second
using namespace std;
ifstream fin ("patrate3.in");
ofstream fout ("patrate3.out");
int n,i,j,nrc;
pair <long long,long long> v[1001];
long long ok,x,y,xm,ym,x1,y1,x2,y2,a,b;
char s1[30],s2[30];
bool cb (pair <long long,long long> p)
{
    int st=1,dr=n,mij;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (v[mij]==p)
            return 1;
        if (v[mij]>p)
            st=mij+1;
        else
            dr=mij-1;
    }
    return 0;
}
int main()
{
    fin>>n;
    for (i=1; i<=n; i++)
    {
        fin>>s1>>s2;
        x=0;
        ok=1;
        for (j=0; s1[j]; j++)
        {
            if (s1[j]=='-')
            {
                ok=-1;
                continue;
            }
            if (s1[j]=='.')
                continue;
            x=x*10+s1[j]-'0';
        }
        x*=ok;
        y=0;
        ok=1;
        for (j=0; s2[j]; j++)
        {
            if (s2[j]=='-')
            {
                ok=-1;
                continue;
            }
            if (s2[j]=='.')
                continue;
            y=y*10+s2[j]-'0';
        }
        y*=ok;
        x*=10;
        y*=10;
        v[i]=make_pair (x,y);
    }
    sort (v+1,v+n+1);
    reverse (v+1,v+n+1);
    for (i=1; i<=n; i++)
    {
        for (j=i+1; j<=n; j++)
        {
            if (v[i].x>=v[j].x&&v[i].y>v[j].y)
            {
                xm=(v[i].x+v[j].x)/2;
                ym=(v[i].y+v[j].y)/2;
                a=v[i].x-xm;
                b=v[i].y-ym;
                x1=xm-b;
                y1=ym+a;
                x2=xm+b;
                y2=ym-a;
                if (cb (make_pair (x1,y1))&&cb (make_pair (x2,y2)))
                    nrc++;
            }
        }
    }
    fout<<nrc;
    return 0;
}