Cod sursa(job #2760745)

Utilizator cosminradu1760Cosmin-Andrei Radu cosminradu1760 Data 28 iunie 2021 21:27:09
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("patrate3.in");
ofstream fout("patrate3.out");


int n, contor = 0;
set<pair<int,int>> multime; //avem puncte unice, deci folosim set;
pair<int,int> v[1001];//am folosit pair deoarece este mai usor de folosit find in set, decat cu struct

bool verificaPatrat(pair<int,int> a, pair<int,int> b)
{
    pair<int,int> c,d;
    int x,y; //luam cate 2 puncte, si verificam daca celelalte doua puncte care ar fi
             //construit patratul exista in multime

    x = a.second - b.second;
    y = b.first - a.first;

    c.first = a.first + x;  //construim triunghiurile de sustinere folosind laturile x si y
    c.second = a.second + y;
    d.first = b.first + x;
    d.second = b.second + y;


    if(multime.find(c) != multime.end() && multime.find(d) != multime.end())
        return 1; //daca gasim punctele construite c si d in multime e ok

    return 0;


}

int main()
{
    float x,y;
    fin>>n;

    for( int  i = 0; i < n; i++)
    {
        fin>>x>>y;
        v[i].first =  round(x * 10000);
        v[i].second = round(y * 10000);
        cout<<v[i].first<<endl<<v[i].second<<endl;
        multime.insert(v[i]);
    }

    for(int i = 0; i < n; i++)
        for(int j = 0 ; j < n ; j++)
            if(i != j)
                if(verificaPatrat(v[i], v[j]) == 1)
                    contor++;

    contor /= 4; //deoarece numaram patratul pentru fiecare latura a acestuia(pereche de 2 puncte din multime)

    fout<<contor;

    return 0;
}