Pagini recente » Cod sursa (job #1791439) | Cod sursa (job #2858619) | Cod sursa (job #1944556) | Cod sursa (job #722932) | Cod sursa (job #491457)
Cod sursa(job #491457)
// infoarena: problema/trapez //
#include <fstream>
#include <iostream>
#include <vector>
#include <utility>
#include <cmath>
#define INF 1<<30
#define MAXN 1010
#define EPS 0.0001
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
struct PUNCT
{
int x,y;
};
pair<int,int> ired(int a, int b)
{
if(b < 0)
a *= -1, b *= -1;
if(a == 0)
return make_pair(0, 1);
if(b == 0)
return make_pair(1, 0);
int t1=a, t2=b,r;
r = t1%t2;
while(r)
{
t1 = t2;
t2 = r;
r = t1 % t2;
}
if(a/t2 > 0 && b/t2 < 0 || a/t2 < 0 && b/t2 < 0)
a*=-1, b*=-1;
return make_pair(a/t2, b/t2);
}
pair<int,int> panta(PUNCT a, PUNCT b)
{
return ired(a.x - b.x, a.y - b.y);
}
vector<pair<int,int> > c;
vector<pair<int,int> >::iterator it;
PUNCT p[MAXN];
int n,i,j,s,num;
pair<int,int> pc;
int main()
{
in>>n;
for(i=1; i<=n; i++)
in>>p[i].x>>p[i].y;
for(i=1; i<n; i++)
for(j=i+1; j<=n; j++)
c.push_back(panta(p[i], p[j]));
sort(c.begin(), c.end());
for(it = c.begin(); it!=c.end(); ++it)
cout<<it->first<<'/'<<it->second<<'\n';
it = c.begin();
pc = *it;
num = 1;
for(++it; it!=c.end(); ++it)
if(pc == *it)
++num;
else
{
pc = *it;
s += num * (num - 1) / 2;
num = 1;
}
out<< s;
return 0;
}