Pagini recente » Cod sursa (job #1405826) | Cod sursa (job #2394624) | Cod sursa (job #24722) | Cod sursa (job #1469442) | Cod sursa (job #2694929)
#include <algorithm>
#include <fstream>
#include <stdio.h>
const double ERR = 0.00001;
struct elemente{
double l, c;
} v[ 1000 ];
int n, patrate;
double mod( double a ){
if( a < 0 )
return -a;
return a;
}
bool cmp( const elemente& A, const elemente& B ){
if( mod( A.l - B.l ) < ERR )
return A.c < B.c;
return A.l < B.l;
}
bool este( elemente put ){
int st = 1, mij;
int dr = n;
while( st <= dr ){
mij = ( st + dr ) >> 1;
if( mod( put.l - v[ mij ].l ) < ERR && mod( put.c - v[ mij ].c ) < ERR )
return true;
if( cmp( put, v[ mij ] ) )
dr = mij - 1;
else st = mij + 1;
}
return false;
}
int main()
{
std::ifstream fin( "patrate3.in" );
fin >> n;
for( int i = 1; i <= n; i++ )
fin >> v[ i ].l >> v[ i ].c;
fin.close();
std::sort( v + 1, v + n + 1, cmp );
for( int i = 1; i < n; i++ )
for( int j = i + 1; j <= n; j++ ){
elemente up, down, delta, mij;
mij.l = ( v[ i ].l + v[ j ].l ) / ( double )2;
mij.c = ( v[ i ].c + v[ j ].c ) / ( double )2;
delta.l = mod( mij.l - v[ i ].l );
delta.c = mod( mij.c - v[ i ].c );
if( v[ i ].c < v[ j ].c ) {
up.l = mij.l - delta.c;
up.c = mij.c + delta.l;
down.l = mij.l + delta.c;
down.c = mij.c - delta.l;
} else {
up.l = mij.l - delta.c;
up.c = mij.c - delta.l;
down.l = mij.l + delta.c;
down.c = mij.c + delta.l;
}
if( este( up ) && este( down ) )
++patrate;
}
FILE *fout = fopen( "patrate3.out", "w" );
fprintf( fout, "%d\n", patrate >> 1 );
fclose( fout );
return 0;
}