Cod sursa(job #1451138)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 16 iunie 2015 11:12:58
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
const int NMAX = 10005;

struct dreapta{
    int x1,y1,x2,y2;
    int a,b;
    bool zero;
};

dreapta v[NMAX * 2];

int A[NMAX],B[NMAX],n,nr;

void read()
{

    in>>n;
    for(int i = 1 ; i <= n ; ++i)
        in>>A[i]>>B[i];
    in.close();

}

int cmmdc(int a,int b)
{

    if(!b)
        return a;
    return cmmdc(b,a % b);
}

int abs(int a)
{

    if(a >= 0)
        return a;
    return -a;
}

bool not_equal(int x1,int y1,int x2,int y2)
{

    if(x1 == x2 && y1 == y2)
        return false;
    return true;
}

void solve()
{

    for(int i = 1 ; i < n ; ++i)
        for(int j = i+1 ; j <= n  ; ++j){

            int p1 = B[i] - B[j];
            int p2 = A[i] - A[j];
            if(!p2){
                v[++nr].a = p1;
                v[nr].b = p2;
            }
            else if(!p1){
                v[++nr].a = p1;
                v[nr].b = p2;
            }
            else{

                int cm = cmmdc(abs(p1),abs(p2));
                v[++nr].a = p1/cm;
                v[nr].b = p2/cm;
            }
            v[nr].x1 = A[i];
            v[nr].y1 = B[i];
            v[nr].x2 = A[j];
            v[nr].y2 = B[j];
            if(v[nr].a == 0 || v[nr].b == 0)
                v[nr].zero = true;
            else
                v[nr].zero = false;
        }

    int sol = 0;
    for(int i = 1 ; i < nr ; ++i)
        for(int j = i + 1 ; j <= nr ; ++j)
            if(((v[i].a == v[j].a && v[i].b == v[j].b) || (v[i].zero == v[j].zero && v[i].zero == true)) && not_equal(v[i].x1,v[i].y1,v[j].x1,v[j].y1) && not_equal(v[i].x1,v[i].y1,v[j].x2,v[j].y2) && not_equal(v[i].x2,v[i].y2,v[j].x1,v[j].y1) && not_equal(v[i].x2,v[i].y2,v[j].x2,v[j].y2))
                ++sol;

    out<<sol;
}

int main()
{

    read();
    solve();
    return 0;
}