Pagini recente » Cod sursa (job #956634) | Cod sursa (job #2555220) | Cod sursa (job #408782) | Cod sursa (job #864941) | Cod sursa (job #2314846)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#define N 1024
#define f first
#define s second
pair<long double,long double> v[N],m,variatie,colturi[2];
int i,j,n,ans;
const long double prag = 0.00001;
inline long double modul (long double x){
if (x > 0)
return x;
return -x;
}
inline int egalitate (long double a,long double b){
if(modul(a - b) < prag)
return 1;
return 0;
}
int before (pair<long double,long double> a, pair<long double,long double> b){
if (egalitate (a.f,b.f))
return (a.s < b.s);
return (a.f < b.f);
}
int bs (pair<long double,long double> a){
int p = 0;
for (int i = n - 1; i > 0; i >>= 1)
while (i + p < n && before(v[i + p],a))
p += i;
if (egalitate (a.f,v[p + 1].f) && egalitate (a.s,v[p + 1].s))
return 1;
if (egalitate (a.f,v[p].f) && egalitate (a.s,v[p].s))
return 1;
return 0;
}
int main()
{
ifstream fin ("patrate3.in");
fin >> n;
for (i = 0; i < n; ++i)
fin >> v[i].f >> v[i].s;
sort(v,v + n);
ans = 0;
for (i = 0; i < n; ++i)
for (j = i + 1 ; j < n; ++j){
m.f = (v[i].f + v[j].f) / 2;
m.s = (v[i].s + v[j].s) / 2;
variatie.f = modul(v[i].f - m.f);
variatie.s = modul(v[i].s - m.s);
if (v[i].s < v[j].s){
colturi[0].f = m.f + variatie.s;
colturi[0].s = m.s - variatie.f;
colturi[1].f = m.f - variatie.s;
colturi[1].s = m.s + variatie.f;
}
else{
colturi[0].f = m.f - variatie.s;
colturi[0].s = m.s - variatie.f;
colturi[1].f = m.f + variatie.s;
colturi[1].s = m.s + variatie.f;
}
if (bs(colturi[0]) && bs(colturi[1]))
++ans;
}
ofstream fout ("patrate3.out");
fout << ans / 2;
return 0;
}