Pagini recente » Cod sursa (job #808743) | Monitorul de evaluare | Istoria paginii utilizator/tatu_daniela_florentina_325ca | Profil M@2Te4i | Cod sursa (job #176948)
Cod sursa(job #176948)
#include <cstdio>
#include <algorithm>
#define Nmax 1001
const long INF = 1000000000;
using namespace std;
struct trap{long x,y;} v[Nmax];
struct frac{long it,at;} p[Nmax*Nmax];
int nrp;
struct cmp{
bool operator ()(const frac &a, const frac &b)
{
return ((long long)((a.it * b.at)) < (long long)((a.at * b.it)));
}
};
int n, viz[Nmax*Nmax],nrinf;
int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%lld %lld",&v[i].x,&v[i].y);
for(int i=0; i<n-1; i++)
for(int j=i+1; j<n; j++)
{
if(v[i].y != v[j].y)
{
p[nrp].it = v[i].x - v[j].x;
p[nrp].at = v[i].y - v[j].y;
if(p[nrp].at < 0)
{
p[nrp].it = -(p[nrp].it);
p[nrp].at = -(p[nrp].at);
}
nrp++;
}
else
nrinf++;
}
int nrtrap = 0;
/*for(int i=0; i<nrp-1; i++)
for(int j=i+1; j<nrp; j++)
if(p[i].it * p[j].at == p[i].at * p[j].it)
nrtrap ++;*/
sort(p,p+nrp,cmp());
for(int k = nrp; k< nrp + nrinf; k++)
{
p[k].it = INF;
p[k].at = 1;
}
nrp += nrinf;
/*for(int i=0; i<nrp; i++)
printf("%d/%d\n",p[i].it,p[i].at)*/
for(int i=1; i<nrp; i++)
if(p[i].it * p[i-1].at == p[i].at * p[i-1].it)
{
viz[i] = (viz[i-1] + 1);
nrtrap += viz[i];
}
printf("%d\n",nrtrap);
return 0;
}