Pagini recente » Cod sursa (job #1630392) | Borderou de evaluare (job #162544) | Diferente pentru olimpici intre reviziile 180 si 171 | Borderou de evaluare (job #3158249) | Cod sursa (job #117073)
Cod sursa(job #117073)
#include <stdio.h>
#include <stdlib.h>
struct tort{long long szamlalo; long long nevezo;};
struct pont{long long x; long long y;};
tort egyenesek[1000010];
pont pontok[1010];
long long hasonlit(const void *egyenes1,const void *egyenes2)
{
tort a, b;
long long x;
a = *(tort*)egyenes1;
b = *(tort*)egyenes2;
x = a.szamlalo * b.nevezo - b.szamlalo * a.nevezo;
if (x < 0) return(-1) else
if (x > 0) return(1) else return(0);
}
int main()
{
FILE *f;
long long i, j, n, k = 0, db, r = 0;
f = fopen("trapez.in", "rt");
fscanf(f, "%lli", &n);
for (i = 0; i < n; i++)
fscanf(f, "%lli %lli", &pontok[i].x, &pontok[i].y);
fclose(f);
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
{
egyenesek[k].szamlalo = pontok[j].x - pontok[i].x;
egyenesek[k].nevezo = pontok[j].y - pontok[i].y;
if (egyenesek[k].nevezo < 0)
{
egyenesek[k].szamlalo *= -1;
egyenesek[k].nevezo *= -1;
}
k++;
}
qsort(egyenesek, n*(n-1)/2, sizeof(tort), hasonlit);
for (i = 0; i <= k; i++)
{
db = 1;
while (egyenesek[i].szamlalo * egyenesek[i + 1].nevezo ==
egyenesek[i + 1].szamlalo * egyenesek[i].nevezo && i + 1 < k)
{
db++;
i++;
}
r += db * (db - 1) / 2;
}
f = fopen("trapez.out", "wt");
fprintf(f, "%lli", r);
fclose(f);
}