Cod sursa(job #322120)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 8 iunie 2009 01:03:18
Problema Medie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <algorithm>
#define N 9500
#define P 7010
using namespace std;
int n,v[N],maxim,r;
int ap[P];
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;
			ap[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;
	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 (v[i]==v[t] && v[j]==v[t])
					rez+=ap[v[t]]-2;
				if (v[i]==v[t] && v[j]!=v[t])
					rez+=ap[v[t]]-1;
				if (v[i]!=v[t] && v[j]!=v[t])
					rez+=ap[v[t]];
			}
		}
	printf("%lld\n",rez);
}
int main()
{
	freopen("medie.in","r",stdin);
	freopen("medie.out","w",stdout);
	citire();
	rezolvare();
	return 0;
}