Cod sursa(job #1489490)

Utilizator bt.panteaPantea Beniamin bt.pantea Data 21 septembrie 2015 11:26:48
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("trapez.in");
ofstream g ("trapez.out");
struct point
{
    unsigned x,y;
}v[1005];
int n,i,j,k,nr,x0;
long long p[1000010];
/*struct asd
{
    int m,x;
}p[1000010];*/
int poz(int ls, int ld)
{
    int i=ls,j=ld,sw=1;
    while (i<j)
    {
        //if ((float)p[i].m/p[i].x>(float)p[j].m/p[j].x)
        if (p[i]>p[j])
        {
            p[0]=p[i];
            p[i]=p[j];
            p[j]=p[0];
            sw=!sw;
        }
        i+=sw;
        j-=!sw;
    }
    return i;
}
void quick(int ls, int ld)
{
    int p;
    if (ls<ld)
    {
        p=poz(ls,ld);
        quick(ls,p-1);
        quick(p+1,ld);
    }
}

int main()
{
    f>>n;
    k=0;
    for (i=1;i<=n;i++)
        f>>v[i].x>>v[i].y;
    for (i=1;i<n;i++)
        for (j=i+1;j<=n;j++)
        {
            k++;
            //p[k].m=v[j].y-v[i].y;
            if (v[j].x!=v[i].x) p[k]=(v[j].y-v[i].y)*10000000/(v[j].x-v[i].x);
            else
            {
                p[k]=2000000001;
            }
            //p[k].x=v[j].x-v[i].x;
        }
    quick(1,k);
    nr=0;
    for (i=1;i<k;i++)
    {
        j=i+1;
        while (p[i]==p[j])
        {
            cout<<p[i]<<' '<<p[j]<<'\n';;
            j++;
            nr++;
        }
    }
    /*for (i=1;i<k;i++)
        for (j=i+1;j<=k;j++)
            if (p[i].m*p[j].x==p[j].m*p[i].x) nr++;*/
    g<<nr;
    return 0;
}