Cod sursa(job #869563)

Utilizator ericptsStavarache Petru Eric ericpts Data 1 februarie 2013 19:48:27
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
#include <algorithm>
using namespace std;

struct point
{
public:
    int x,y;
    point()
    {
        x = y = 0;
    }
}pct[1005];
struct linie
{
public:
    int sus,jos;
    linie()
    {
        sus = jos = 0;
    }
}line[1002*1002];

bool comp(const linie &a,const linie &b)
{
    return a.sus * b.jos <= b.sus * a.jos;
}

int main()
{
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    int i,j,n;
    int dx,dy;
    int k;
    int cr = 0;
    unsigned int show = 0;
    scanf("%d\n",&n);

    for(i=1;i<=n;++i)
        scanf("%d %d\n",&pct[i].x,&pct[i].y);

    for(i=1  ;i<=n;++i)
    for(j=i+1;j<=n;++j)
    {
        dx = pct[j].x-pct[i].x;
        dy = pct[j].y-pct[i].y;
        line[++cr].sus = dx;
        line[cr].jos = dy;
    }
    sort(line+1,line+cr+1,comp);
    k = -1;
    for(i=1;i<=cr;++i)
    {

        if(line[i].sus * line[i-1].jos == line[i-1].sus * line[i].jos)
            ++k;
        else
        {
            show += k * (k+1) / 2;
            k = 0;
        }
    }
    printf("%u\n",show);
    return 0;
}