Cod sursa(job #1137862)

Utilizator Daniel3717Aleca Daniel Adrian Daniel3717 Data 9 martie 2014 14:13:52
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

int cmmdc(int a,int b)
{
    if ((a==b)&&(b==0))
        return 1;
    if (b==0)
        return a;
    return cmmdc(b,a%b);
}

void redo(pair <int,int> fr)
{
    int d=cmmdc(fr.first,fr.second);
    fr.first=fr.first/d;
    fr.second=fr.second/d;
}

pair <int,int> fr;
int a,b,n,i,x,y,i1,k;

vector <pair <int,int> > v,vl;

bool fless(pair <int,int> const f1, pair <int,int> const f2)
{
    return (f1.first*f2.second)<(f2.first*f1.second);
}

int fmod(int nr)
{
    if (nr<0)
        return -nr;
    return nr;
}

int main(void)
{
    FILE * f;
    f=fopen("trapez.in","r");
    ofstream g("trapez.out");
    fscanf(f,"%d",&n);
    for (i=1;i<=n;i++)
    {
        fscanf(f,"%d%d",&x,&y);
        v.push_back(make_pair(x,y));
    }

    for (i=0;i<v.size();i++)
        for (i1=i+1;i1<v.size();i1++)
        {
            y=v[i1].second-v[i].second;
            x=v[i1].first-v[i].first;
            y=fmod(y);
            x=fmod(x);
            fr.first=y;
            fr.second=x;
            redo(fr);
            vl.push_back(fr);
        }

    sort(vl.begin(),vl.end(),&fless);

    for (i=1;i<vl.size();i++)
    {
        if ((vl[i].first==vl[i-1].first)&&(vl[i].second==vl[i-1].second))
            k++;
        //cout<<vl[i].first<<' '<<vl[i].second<<'\n';
    }
    g<<k;
    return 0;
}