Pagini recente » Istoria paginii utilizator/skittles | Monitorul de evaluare | Istoria paginii utilizator/robert_oprisan | yinyang | Cod sursa (job #133640)
Cod sursa(job #133640)
#include <cstdio>
#include <vector>
#include <algorithm>
#define INF "trapez.in"
#define OUF "trapez.out"
#define pb(arg) push_back(arg)
#define sz(arg) arg.size()
using namespace std;
const int NMAX=1024;
const double EPS=1e-14;
int x[NMAX],y[NMAX],n;
vector<double> pante;
bool cmp(double a,double b)
{
return (b-a)>EPS;
}
double modl(double nr)
{
if(nr<0.0) return (nr*(-1));
else return nr;
}
int main()
{
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
int i,j,dim;
long long total=0;
double m;
fscanf(in,"%d",&n);
for(i=1;i<=n;++i) fscanf(in,"%d%d",x+i,y+i);
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)//pantele dintre toate perechile de puncte
{
if((x[j]-x[i])!=0)
m=(double)(y[j]-y[i])/(x[j]-x[i]);
else m=(EPS*10);
pante.pb(m);
}
sort(pante.begin(),pante.end(),cmp);
dim=sz(pante);
for(i=0;i<dim;++i)
{
for(j=i+1;j<dim;++j)
if(modl(pante[i]-pante[j])<EPS) ++total;
else break;
}
fprintf(out,"%lld\n",total);
fclose(in);fclose(out);
return 0;
}