Pagini recente » Cod sursa (job #2830726) | Cod sursa (job #1589710) | Cod sursa (job #2509948) | Cod sursa (job #1103237) | Cod sursa (job #2694924)
#include <algorithm>
#include <stdio.h>
const float ERR = 0.00001;
struct elemente{
float l, c;
} v[ 1000 ];
int n, patrate;
float mod( float 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 = 0, mij;
int dr = n - 1;
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()
{
FILE *fin = fopen( "patrate3.in", "r" );
fscanf( fin, "%d", &n );
for( int i = 0; i < n; i++ )
fscanf( fin, "%f%f", &v[ i ].l, &v[ i ].c );
fclose( fin );
std::sort( v, v + n, cmp );
for( int i = 0; i < n; i++ )
printf( "%f %f\n", v[ i ].l, v[ i ].c );
for( int i = 0; i < n; i++ )
for( int j = i + 1; j < n; j++ ){
elemente up, down, delta, mij;
mij.l = ( v[ i ].l + v[ j ].l ) / ( float )2;
mij.c = ( v[ i ].c + v[ j ].c ) / ( float )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( fin );
return 0;
}