Cod sursa(job #1012036)

Utilizator Teodor94Teodor Plop Teodor94 Data 17 octombrie 2013 22:06:16
Problema Trapez Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <cassert>
#include <algorithm>

using namespace std;

struct point {
    int x, y;
};

#define MAX_N 1000
#define EPS 0.0000001

point v[MAX_N];
double a[MAX_N * MAX_N];

void read( FILE *fin, int &n ) {
    assert( fscanf( fin, "%d", &n ) == 1 );
    for ( int i = 0; i < n; ++i )
        assert( fscanf( fin, "%d%d", &v[i].x, &v[i].y ) == 2 );
}

double slope( point a1, point a2 ) {
    return ( double ) ( a2.y - a1.y ) / ( a2.x - a1. x );
}

int main() {
    FILE *fin, *fout;
    
    int n;
    fin = fopen( "trapez.in", "r" );
    read( fin, n );
    fclose( fin );
    
    int nr = 0;
    for ( int i = 0; i < n - 1; ++i )
        for ( int j = i + 1; j < n; ++j ) {
            a[nr] = slope( v[i], v[j] );
            ++nr;
        }

    sort( a, a + nr );

    int len = 1, ans = 0;
    for ( int i = 0; i < nr - 1; ++i )
        if ( a[i + 1] - a[i] < EPS )
            ++len;
        else {
            ans += len * ( len - 1 ) / 2;

            len = 1;
        }

    fout = fopen( "trapez.out", "w" );
    fprintf( fout, "%d\n", ans );
    fclose( fout );
}