Pagini recente » Cod sursa (job #1281638) | Cod sursa (job #96386) | Cod sursa (job #1791296) | Cod sursa (job #683285) | Cod sursa (job #2842017)
#include <algorithm>
#include <utility>
#include <stdio.h>
#include <vector>
static inline int mod( int a ) {
return ( a <= 0 ? -a : a );
}
int GCD( int a, int b ) {
if( !b )
return a;
return GCD( b, a % b );
}
#define PL std::pair<int, int>
struct Punct {
int x, y;
};
std::vector<PL> val;
Punct v[ 1001 ];
int n;
int main()
{
FILE *fin = fopen( "trapez.in", "r" );
fscanf( fin, "%d", &n );
for( int i = 0; i < n; i++ )
fscanf( fin, "%d %d", &v[ i ].x, &v[ i ].y );
fclose( fin );
for( int i = 0; i < n; i++ )
for( int j = i + 1; j < n; j++ ) {
int gcd = GCD( mod( v[ i ].x - v[ j ].x ), mod( v[ i ].y - v[ j ].y ) );
int x = ( v[ i ].x - v[ j ].x ) / gcd;
int y = ( v[ i ].y - v[ j ].y ) / gcd;
if( x > 0 && y < 0 )
x = -x, y = -y;
val.push_back( { x, y } );
}
std::sort( val.begin(), val.end() );
int rez = 0;
int cate = 1;
PL V = val[ 0 ];
int right = val.size();
for( int i = 1; i < right; i++ )
if( V == val[ i ] ) {
rez += cate;
++cate;
} else {
V = val[ i ];
cate = 1;
}
FILE *fout = fopen( "trapez.out", "w" );
fprintf( fout, "%d\n", rez );
fclose( fout );
return 0;
}