Pagini recente » Cod sursa (job #3140052) | Cod sursa (job #1062802) | Cod sursa (job #3290410) | Cod sursa (job #2204668) | Cod sursa (job #656534)
Cod sursa(job #656534)
#include <fstream>
#include <algorithm>
#define NMAX 1011
using namespace std;
int n,k,sol;
int x[NMAX],y[NMAX];
struct panta{
int numarator,numitor;
}m[NMAX*NMAX];
bool cmp(panta a,panta b){
if(a.numarator>b.numarator)
return 1;
if(a.numitor>b.numitor)
return 1;
return 0;
}
void read(){
int i;
ifstream f("trapez.in");
f>>n;
for(i=1;i<=n;++i){
f>>x[i]>>y[i];
}
}
int cmmdc(int a, int b){
int r;
while(b){
r=a%b;
a=b;
b=r;
}
return a;
}
void solve(){
int i,j,a,b,div,nr;
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j){
a=y[j]-y[i];
b=x[j]-x[i];
div=cmmdc(a,b);
m[++k].numarator=a/div;
m[k].numitor=b/div;
}
sort(m+1,m+k+1,cmp);
nr=1;
for(i=1;i<k;++i)
if(m[i].numarator==m[i+1].numarator && m[i].numitor==m[i+1].numitor) nr++;
else {
sol=sol+(nr-1)*nr/2;
nr=1;
}
}
void write(){
ofstream g("trapez.out");
g<<sol<<"\n";
}
int main(){
read();
solve();
write();
return 0;
}