Cod sursa(job #1330166)

Utilizator ZenusTudor Costin Razvan Zenus Data 30 ianuarie 2015 14:33:45
Problema Trapez Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <climits>

using namespace std;

#define NMAX 1007
#define F first
#define S second
#define SQR(x) ((x)*(x))
#define eps (0.00001)

long long to;
pair < int , int > po[NMAX];
int i,j,N,cu;
double ip;
double tg[NMAX*NMAX];

bool egal(double x,double y)
{
    if (x>y) swap(x,y);
    return (y-x<eps);
}

int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);

scanf("%d",&N);

for (i=1;i<=N;++i)
scanf("%d%d",&po[i].F,&po[i].S);

for (i=1;i<=N;++i)
for (j=i+1;j<=N;++j)
tg[(int)++tg[0]]=(po[i].F==po[j].F) ? INT_MAX : (double)(po[i].S-po[j].S)/(po[i].F-po[j].F);

sort(tg+1,tg+(int)tg[0]+1);

for (i=cu=1;i<=(int)tg[0];++i)
{
    if (egal(tg[i],tg[i-1])) ++cu;
    else
    {
        to+=(long long)cu*(cu-1)/2;
        cu=1;
    }
}

printf("%lld\n",to);

return 0;
}