Pagini recente » Cod sursa (job #19811) | Monitorul de evaluare | Cod sursa (job #2351399) | Cod sursa (job #1015491) | Cod sursa (job #719280)
Cod sursa(job #719280)
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("trapez.in"); ofstream g("trapez.out");
struct panta {int x, y;};
panta v[1000005], p[1005];
int i, j, n, m, cmmdc, t, x, y, r, rez;
inline bool comp (panta fx, panta fy){return fx.x<fy.x || (fx.x==fy.x && fx.y<fy.y);}
int gcd(int fx, int fy){
if (fy==0) return fx;
else return gcd(fy, fx%fy);
}
int main(){
f>>n; for (i=1; i<=n; i++) f>>p[i].x>>p[i].y;
t=0;
for (i=1; i<=n; i++) for (j=i+1; j<=n; j++) {
if (p[i].x==p[j].x) {
v[++t].x=2; v[t].y=2;
}
else {
x=p[i].x-p[j].x;
y=p[i].y-p[j].y;
if (x<0) { x*=-1; y*=-1; }
cmmdc=gcd(abs(x), abs(y));
v[++t].x=x/cmmdc; v[t].y=y/cmmdc;
}
}
sort (v+1, v+t+1, comp);
for (i=1; i<=t; i++){
r=0;
while (v[i].x==v[i+1].x && v[i].y==v[i+1].y) {
i++;
r++;
}
rez=rez+(r*(r+1))/2;
}
g<<rez;
}