Cod sursa(job #204267)

Utilizator IrnukIrina Grosu Irnuk Data 22 august 2008 15:29:25
Problema Medie Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
/*medie*/

#include<fstream.h>

int id[7005],v[9005],n;
long cont;
ifstream fin("medie.in");
ofstream fout("medie.out");

void pivotare(int i,int j,int &m)
{

	int pivot=v[i];

	while(i<j)
	{
		while(j>i && v[j]>=pivot) j--;
		v[i]=v[j];
		while(i<j && v[i]<=pivot) i++; 
		v[j]=v[i];
	}
	v[i]=pivot;
	m=i;
}

void quick_sort(int p,int q)
{
	int m;

	if(p<q)
	{
		pivotare(p,q,m); 

		quick_sort(p,m-1);
	
		quick_sort(m+1,q);
	}

}
long fact(int poz)
{
	long f;
	f=(poz-2)*(poz-1)*poz;
	return f/2;
}
int cauta(int poz)
{
	int i=poz,sv;

	while(poz<n && v[poz]==v[poz-1])
		poz++;
	sv=poz;
	poz=poz-i+1;
	cont+=fact(poz);
	return sv;
}

int main()
{
	int i,j;
	fin>>n;
	for(i=0;i<n;i++)
	{
		fin>>v[i];
		id[v[i]]=1;
	}

	quick_sort(0,n-1);

	for(i=0;i<n-2;i++)
	{
		if(v[i]==v[i+1])
			i=cauta(i+1);

		for(j=i+1;j<n-1;j++)
		{
			if(id[2*v[j]-v[i]]==1)
				cont++;
		}
	}
	fout<<cont<<'\n';
	fout.close();
	return 0;
}