Cod sursa(job #2760785)

Utilizator Virgil993Virgil Turcu Virgil993 Data 29 iunie 2021 03:04:18
Problema Patrate 3 Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.7 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;


ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
int n,nr;
struct punct{

float x,y;

punct(float x2 = 0,float y2 = 0):x(x2),y(y2)
{}

friend bool operator<(const punct& p,const punct& t)
{
    return t.x>p.x;
}
};

set<punct> st;



int main() {

    fin>>n;
    float x1,y1;
    int contor=0;
    for(int i=0;i<n;i++)//umplem setul cu punctele citite
    {
        fin>>x1>>y1;
        punct aux;
        aux.x = round(x1*10000);
        aux.y = round(y1*10000);
        st.insert(aux);
    }
    for(auto it= st.begin();it!=st.end();it++)//trecem prin toate punctele si vedem daca sunt colturile opuse ale unui patrat
        for(auto it2=st.begin();it2!=st.end();it2++)
        {

            if(it!=it2)
            {
                punct aux1,aux2; //construim celelalte puncte si vedem daca se regasesc in set si daca da atunci marim contorul
                aux1.x = (it->y - it2->y) + it->x;
                aux1.y = (it2->x - it->x) + it->y;
                aux2.x = (it->y - it2->y) + it2->x;
                aux2.y = (it2->x - it->x) + it2->y;
                if(st.find(aux1)!=st.end() && st.find(aux2)!=st.end())
                {
                    contor++;
                    cout<<aux1.x<<" "<<aux1.y<<"\n";
                    cout<<aux2.x<<" "<<aux2.y<<"\n";
                    cout<<"\n\n\n";
                }
            }

        }
        //deoarece fiecare 2 colturi ale unui patrat vor fi verificate de doua ori , in ordine diferita
        // vom numara acelasi patrat de 4 ori si de aceea impartim contorul la 4
        fout<<contor/4;


    return 0;

}