Cod sursa(job #578662)

Utilizator eukristianCristian L. eukristian Data 11 aprilie 2011 14:45:45
Problema Medie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <algorithm>

int n, a[9001];

int binSearch(int left, int right, int t2)
{
	int mid = 0;
	while (left <= right)
	{
		mid = ((left  +right)>>1);
		if (a[mid] == t2)
			break;
		else if (a[mid] < t2)
			left = mid + 1;
		else
			right = mid - 1;
	}

	return mid;
}

int main()
{
	unsigned int sol = 0;

	FILE *f = fopen("medie.in", "r");
	FILE *g = fopen("medie.out", "w");

	fscanf(f,"%d\n", &n);

	for (int i = 1 ;i <= n ; ++i)
		fscanf(f, "%d\n", &a[i]);
	
	std::sort(a + 1, a + n + 1);

	for (int i = 2 ; i < n ; ++i)
	{
		for (int j = 1 ; j < i ; ++j)
		{
			int t2 = (i << 1) - j;

			int k = binSearch(i + 1, n, t2);
			if (a[k] == t2)
			{	
				int count = 1, t = k - 1;
				while (a[t] == t2)
				{
					count++;
					t--;
				}
				t = k+1;
				while(a[t] == t2)
				{
					count++;
					t++;
				}
				sol += count;
			}
		}
	}

	fprintf(g, "%d\n", sol);

	return 0;
}