Pagini recente » Cod sursa (job #1670088) | Cod sursa (job #322763) | Cod sursa (job #987710) | Cod sursa (job #196613) | Cod sursa (job #1798953)
#include <cstdio>
#include <algorithm>
#include <cmath>
#define MOD 1000
using namespace std;
int n, Sol;
double eps=0.00001;
struct elem{
double x, y;
}a[1002];
inline bool cmp(elem x, elem y){
if(x.x != y.x)
return x.x < y.x;
if(x.y != y.y)
return x.y < y.y;
}
inline bool CMP(double x, double y){
if(fabs(x - y) <= eps) return 1;
}
inline bool CBIN(double x, double y){
int st = 1, dr = n;
while( st <= dr )
{
int mid = ( st + dr ) / 2;
if( !CMP(a[mid].x, x ) ){
if( a[mid].x > x ) dr = mid - 1;
else st = mid + 1;
}
else {
if( !CMP( a[mid].y, y ) ){
if( a[mid].y > y ) dr = mid - 1;
else st = mid + 1;
}
else return 1;
}
}
return 0;
}
inline void Solve(double x1, double y1, double x2, double y2){
double mijx = (x1 + x2) / 2, mijy = (y1 + y2) / 2;
double dx = fabs(mijx - x1), dy = fabs(mijy - y1);
if(y1 < y2){
double x3 = mijx + dy, y3 = mijy - dx;
double x4 = mijx - dy, y4 = mijy + dx;
if(CBIN(x3, y3) == 0) return ;
if(CBIN(x4, y4) == 0) return ;
++Sol; return ;
}
double x3 = mijx - dy, y3 = mijy - dx;
double x4 = mijx + dy, y4 = mijy + dx;
if(CBIN(x3, y3) == 0) return ;
if(CBIN(x4, y4) == 0) return ;
++Sol; return ;
}
main()
{
freopen("patrate3.in", "r", stdin);
freopen("patrate3.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n ; ++i)
scanf("%lf%lf", &a[i].x, &a[i].y);
sort(a + 1, a + n + 1, cmp);
for(int i = 1; i < n; ++i){
for(int j = i + 1; j <= n ; ++j){
double x1 = a[i].x, y1 = a[i].y;
double x2 = a[j].x, y2 = a[j].y;
Solve(x1, y1, x2, y2);
}
}
printf("%d", Sol / 2);
return 0;
}