Pagini recente » Cod sursa (job #1227376) | Cod sursa (job #1907774) | Cod sursa (job #2336692) | Cod sursa (job #2310971) | Cod sursa (job #1409681)
#include<fstream>
#include<algorithm>
using namespace std;
int n, m, i, nr, j, ii, jj, c1, c2, nr1;
long long d;
pair<int, int> p[1002];
struct dr{
int x;
int y;
};
dr v[1000000];
ifstream fin("trapez.in");
ofstream fout("trapez.out");
long long det(int X1, int Y1, int X2, int Y2, int X3, int Y3){
return (X3 - X1) * 1LL * (Y2 - Y1) - (X2 - X1) * 1LL * (Y3 - Y1);
}
int cadran(dr a){
if(a.y > 0){
return 1;
}
return 2;
}
int cmp(dr a, dr b){
int c1 = cadran(a);
int c2 = cadran(b);
if(c1 == c2){
int d = det(0, 0, a.x, a.y, b.x, b.y);
return d < 0;
}
return c1 < c2;
}
int main(){
fin>> n;
for(i = 1; i <= n; i++){
fin>> p[i].first >> p[i].second;
}
for(i = 1; i < n; i++){
for(j = i + 1; j <= n; j++){
m++;
ii = i;
jj = j;
if(p[ii].first > p[jj].first){
swap(ii, jj);
}
v[m].x = p[jj].first - p[ii].first;
v[m].y = p[jj].second - p[ii].second;
}
}
sort(v + 1, v + m + 1, cmp);
for(i = 1; i < m; i++){
c1 = cadran(v[i]);
c2 = cadran(v[i+1]);
if(c1 == c2){
d = det(0, 0, v[i].x, v[i].y, v[i+1].x, v[i+1].y);
if(d == 0){
nr1++;
}
else{
nr += (nr1) * (nr1+1) / 2;
nr1 = 0;
}
}
else{
nr += (nr1) * (nr1+1) / 2;
nr1 = 0;
}
}
nr += nr1 * (nr1 + 1) / 2;
fout<< nr <<"\n";
return 0;
}