Cod sursa(job #976106)

Utilizator alex_unixPetenchea Alexandru alex_unix Data 22 iulie 2013 16:06:06
Problema Oite Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb

#include <cstdio>
#include <list>

const int MAX_N(1025);
const int HASH_KEY(10007);

int n, l, Result;
int v [MAX_N];

std::list<int> Hash [HASH_KEY];

inline int Key (const int X)
{
	return X % HASH_KEY;
}

inline void Insert (const int X)
{
	Hash[Key(X)].push_front(X);
}

inline int Find (const int X)
{
	int result(0);
	if (X >= 0)
		for (auto iterator(Hash[Key(X)].begin()), end(Hash[Key(X)].end()) ; iterator != end ; ++iterator)
			if (*iterator == X)
				++result;
	return result;
}

inline void Read (void)
{
	std::freopen("oite.in","r",stdin);
	std::scanf("%d\n",&n);
	std::scanf("%d\n",&l);
	for (int i(1) ; i <= n ; ++i)
		std::scanf("%d\n",&v[i]);
	std::fclose(stdin);
}

inline void Print (void)
{
	std::freopen("oite.out","w",stdout);
	std::printf("%d\n",Result);
	std::fclose(stdout);
}

inline void Compute (void)
{
	int i, j;
	for (i = 1 ; i <= n ; ++i)
	{
		for (j = i + 1 ; j <= n ; ++j)
			Result += Find(l - (v[i] + v[j]));
		for (j = 1 ; j < i ; ++j)
			Insert(v[i] + v[j]);
	}
}

int main (void)
{
	Read();
	Compute();
	Print();
	return 0;
}