Cod sursa(job #1019187)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 30 octombrie 2013 19:33:48
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;

ifstream cin ("trapez.in");
ofstream cout("trapez.out");

struct Point
{
  int x, y;
};

double slope (int x1, int y1, int x2, int y2)
{
  return (double)(x2 - x1) / (double) (y2 - y1);
}

int main()
{
  int n; cin >> n;

  vector<Point> nr;
  unordered_map<double, int> myHash;

  for (int i = 0; i < n; ++i)
    {
      int x, y;
      cin >> x >> y;
      
      Point p; p.x = x; p.y = y;
      nr.push_back(p);
    }

  for (vector<Point>::iterator i = nr.begin(); i != nr.end(); ++i)
    for (vector<Point>::iterator j = i + 1; j != nr.end(); ++j)
      myHash[slope( (*i).x, (*i).y, (*j).x, (*j).y )]++;

  int sum = 0;
  for (unordered_map<double, int>::iterator i = myHash.begin(); i != myHash.end(); ++i)
    {
      int slopeCnt = (*i).second;
      sum += slopeCnt * (slopeCnt - 1) / 2;
    }

  cout << sum << "\n";

  cin .close();
  cout.close();
  
  return 0;
}