Cod sursa(job #717892)
#include<fstream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<iostream>
#define INF -1
using namespace std;
struct point{
int x;
int y;
};
vector<point> read(){
FILE *f=fopen("trapez.in", "r");
int n;
fscanf(f, "%d", &n);
vector<point> a(n);
for(int i=0; i<n; i++)
fscanf(f, "%d %d ", &a[i].x, &a[i].y);
fclose(f);
return a;
}
vector<double> compute(vector<point> a){
vector<double> k;
for(unsigned int i=0; i<a.size()-1; i++)
for(unsigned j=i+1; j<a.size(); j++){
// cout<<a[i].y<<' '<<a[j].y<<' '<<a[i].x<<' '<<a[j].x<<'\n';
if((a[i].x-a[j].x)!=0)
k.push_back((double)(a[i].y-a[j].y)/(a[i].x-a[j].x));
else{
k.push_back(INF);
}
}
return k;
}
int count(vector<double> k){
sort(k.begin(), k.end());
int c=1;
int n=1;
// for(int i=0; i<k.size(); i++)
// cout<<k[i]<<' ';
for(int i=0; i<k.size()-1; i++)
if(k[i]==k[i+1])
c++;
else{
n+=c*(c-1)/2;
c=1;
}
return c;
}
void print(int c){
ofstream g("trapez.out");
g<<(c*(c-1)/2);
g.close();
}
int main(){
vector<point> a=read();
vector<double> b=compute(a);
int c=count(b);
print(c);
return 0;
}