Cod sursa(job #717892)

Utilizator Gady_paulGafton Paul Gady_paul Data 20 martie 2012 12:11:58
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#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;
}