Pagini recente » Istoria paginii runda/concurs_oji_03_2022 | Cod sursa (job #1679762) | Cod sursa (job #1512609) | Cod sursa (job #1624136) | Cod sursa (job #1349427)
#include <stdio.h>
#include <algorithm>
#define NMAX 1023
FILE *fin, *fout;
int gcd(int a, int b)
{
if(b == 0) return a;
return gcd(b, a%b);
}
struct punct
{
int x;
int y;
} arr[NMAX], v[2*NMAX];
int n, temp, pos = 0, x1, y12, count, sum;
bool comp(punct a, punct b)
{
if(a.x < b.x) return 1;
if(a.x > b.x) return 0;
if(a.y < b.y) return 1;
return 0;
}
int main()
{
fin = freopen("trapez.in", "r", stdin);
fout =freopen("trapez.out", "w", stdout);
scanf("%d", &n);
for(int i = 0; i< n; i++)
{
scanf("%d %d", &arr[i].x, &arr[i].y);
}
for(int i = 0; i< n; i++)
{
for(int j = i+1; j< n; j++)
{
v[pos].x = arr[i].x - arr[j].x;
v[pos].y = arr[i].y - arr[j].y;
temp = gcd(v[pos].x, v[pos].y);
if(temp == 0) while(1){};
v[pos].x /= temp;
v[pos].y /= temp;
pos++;
}
}
std::sort(v, v+pos, comp);
x1 = v[0].x;
y12 = v[0].y;
count = 1;
for(int i = 1; i< pos; i++)
{
if(v[i].x == x1 && v[i].y == y12)
{
count++;
}
else
{
sum+=count*(count-1)/2;
count =1;
x1 = v[i].x;
y12 = v[i].y;
}
}
printf("%d\n", sum);
fclose(fin);
fclose(fout);
return 0;
}