Nu aveti permisiuni pentru a descarca fisierul grader_test1.in
Cod sursa(job #2296129)
Utilizator | Data | 4 decembrie 2018 14:06:35 | |
---|---|---|---|
Problema | Trapez | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.2 kb |
#include<cstdio>
#include<algorithm>
using namespace std;
struct dr
{
int x;
int y;
};
int x[1005], y[1005];
dr perechi[1002005];
bool cmp(dr a, dr b)
{
if(a.y == 0 || b.y == 0)
{
if(a.y == 0 && b.y == 0)
return 0;
else
if(a.y == 0)
return 0;
else
return 1;
}
if((double) a.x / a.y > (double)a.x / b.y)
return 1;
else
return 0;
}
int main()
{
int n, i, j, nr = 0, nc;
long long a, b, sum = 0;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%d%d", &x[i], &y[i]);
for(i = 1; i < n; ++ i)
for(j = i + 1; j <= n; ++ j)
{
perechi[++ nr].x = x[i] - x[j];
perechi[nr].y = y[i] - y[j];
}
sort(perechi + 1, perechi + nr + 1, cmp);
for(i = 1; i <= nr; ++ i)
{
nc = 0;
while((long long)perechi[i].x * perechi[i + nc + 1].y == (long long)perechi[i].y * perechi[i + nc + 1].x && i + nc < nr)
{
++ nc;
}
sum = sum + (long long) (((long long)nc * (nc + 1))/2);
}
printf("%lld", sum);
return 0;
}