Pagini recente » Cod sursa (job #1720253) | Cod sursa (job #3220680) | Cod sursa (job #2252642) | Cod sursa (job #1874629) | Cod sursa (job #2760786)
#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)
{}
};
bool operator<(const punct& p,const punct& t)
{
return t.x*t.y>p.x*p.y;
}
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;
}