Pagini recente » Cod sursa (job #2405750) | Cod sursa (job #3194377) | Cod sursa (job #1827081) | Cod sursa (job #290505) | Cod sursa (job #314274)
Cod sursa(job #314274)
#include<fstream>
#include<stdlib.h>
using namespace std;
ifstream f1 ("trapez.in");
ofstream f2 ("trapez.out");
struct punct {long long x,y;};
punct v[1001];
punct panta[1000001];
int compar2(const void*p, const void*q)
{
punct a=*(punct*)p,b=*(punct*)q;
if (a.x==b.x && a.y>b.y) return -1;
return 0;
}
int compar(const void*p, const void*q)
{
punct a=*(punct*)p,b=*(punct*)q;
if (a.x<b.x) return -1;
//if (a.x==b.x && a.y>b.y) return 1;
if (a.x>b.x) return 1;
return 0;
}
int main()
{
long long n,i,j,k,nr=0,vv,p,q,f,pp,qq;
f1>>n;
for (i=1; i<=n; i++)
f1>>v[i].x>>v[i].y;
k=1;
for (i=1; i<=n; i++)
for (j=i+1; j<=n; j++)
{ panta[k].x=v[i].x-v[j].x;
panta[k].y=v[i].y-v[j].y;
k++;
}
k--;
for (i=1; i<=k; i++)
{
p=panta[i].x,q=panta[i].y;
f=0;
if (p>0&&q<0) {q*=-1; f=1;}
if (p<0 && q>0) {p*=-1; f=1;}
if (p<0 && q<0) {p*=-1; q*=-1;}
pp=p;qq=q;
if (p==0) {panta[i].x=0; panta[i].y=0;}
else if (q==0) {panta[i].x=-1000; panta[i].y=-1000;}
else {while (p!=q) if (p>q) p=p-q; else q=q-p;
panta[i].x=pp/p; panta[i].y=qq/q;}
if (f==1) panta[i].y*=-1;
}
qsort(panta+1,k,sizeof(panta[1]),compar);
for (i=1; i<k; i++)
{vv=1;
while (panta[i].x==panta[i+1].x && panta[i].y==panta[i+1].y && i<k)
{i++; vv++;}
if (vv!=1) nr+=(vv*(vv-1))/2;;
}
if (nr!=1) nr*=2;
f2<<nr;
return 0;
}