Cod sursa(job #322102)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 8 iunie 2009 00:53:54
Problema Medie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#include <algorithm>
#define N 9500
#define P 10
using namespace std;
int n,v[N],maxim,r;
long long rez;
void citire()
{
	scanf("%d\n",&n);
	int nr=0;
	char x;
	while (scanf("%c",&x)!= EOF)
	{
		if (x=='\n')
		{
			v[++r]=nr;
			nr=0;
		}
		else
			nr=nr*10+x-'0';
	}
	sort(v+1,v+n+1);
}
int cbin(int x,int y)
{
	int st=y,dr=n,m;
	while (st!=dr)
	{
		m=(st+dr+1)/2;
		if (x>=v[m])
			st=m;
		else
			dr=m-1;
	}
	if (x==v[st])
		return st;
	return -1;
}
void rezolvare()
{
	int i,j,t,k;
	for (i=1; i<n; i++)
		for (j=i+1; j<=n && 2*v[j]-v[i]<=v[n]; j++)
		{
			t=cbin(2*v[j]-v[i],j);
			if (t!=-1)
			{
				if (t!=i && t!=j)
					rez++;
				for (k=t-1; k>=1 && v[k]==v[t]; k--)
					if (k!=i && k!=j)
						rez++;
			}
		}
	printf("%lld\n",rez);
}
int main()
{
	freopen("medie.in","r",stdin);
	freopen("medie.out","w",stdout);
	citire();
	rezolvare();
	return 0;
}