Pagini recente » Cod sursa (job #1308242) | Cod sursa (job #713902) | Cod sursa (job #1600784) | Cod sursa (job #2712489) | Cod sursa (job #407308)
Cod sursa(job #407308)
#include <fstream>
using namespace std;
const int NMAX=1002;
const int pMAX=1000002;
const double oo=2000000004.00;
int X[NMAX],Y[NMAX],n;
//int pX[pMAX],pY[pMAX];
double pan[pMAX];
void citire()
{
ifstream fin("trapez.in");
fin>>n; int i;
for (i=1;i<=n;++i) fin>>X[i]>>Y[i];
fin.close();
}
/*
void qsort(int st, int dr)
{ int i=st,j=dr,mij=(st+dr)/2;
do
{
while ((pY[i]*pX[mij]<pY[mij]*pX[i])&&(i<n)) ++i;
while ((pY[mij]*pX[j]<pY[j]*pX[mij])&&(j>1)) --j;
if (i<=j)
{
int aux=pX[i];pX[i]=pX[j]; pX[j]=aux;
aux=pY[i];pY[i]=pY[j]; pY[j]=aux;
++i; --j;
}
}
while (i<=j);
if (i<dr) qsort(i,dr);
if (st<j) qsort(st,j);
}
*/
int pivot(int st, int dr)
{ short di=1, dj=0;
while (st<dr)
{
if (pan[st]>pan[dr])
{ double aux=pan[st]; pan[st]=pan[dr]; pan[dr]=aux;
di^=1; dj^=1;
}
st+=di; dr-=dj;
}
return st;
}
void qsort(int st, int dr)
{
if (st<dr) { int p=pivot(st,dr);
qsort(st,p-1);
qsort(p+1,dr);
}
}
inline double ABS(double x)
{
if (x<0) return (-1)*x;
return x;
}
int main()
{
citire();
int np=0,i,j;
for (i=1;i<n;++i)
for (j=i+1;j<=n;++j)
{ int x,y;
x=X[i]-X[j]; y=Y[i]-Y[j];
pan[++np]=(x!=0?double(y)/double(x):double(oo));
}
qsort(1,np);
long long S=0;
for (i=1;i<=np;++i)
{
int i1=i;
for (;ABS(pan[i]-pan[i+1])<0.0001;++i);
int nr=i-i1+1;
S+=(nr*(nr-1)/2);
}
ofstream fout("trapez.out");
fout<<S;
fout.close();
return 0;
}