Cod sursa(job #392389)

Utilizator Mishu91Andrei Misarca Mishu91 Data 7 februarie 2010 14:29:39
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;

const int MAX_N = 1034;

ifstream fin ("oite.in");
ofstream fout ("oite.out");

short N;
int L, V[MAX_N], Sol;
hash_multimap<int, short> H;

void citire()
{
	fin >> N >> L;

	for(short i = 1; i <= N; ++i)
		fin >> V[i];

	sort(V+1, V+N+1);
}

void solve()
{
	for(short i = 1; i <= N; ++i)
		for(short j = i+1; j <= N; ++j)
		{
			if(V[i] + V[j] > L) break;
			H.insert(pair<int, short> (V[i] + V[j], i));
		}

	for(short i = 1; i <= N; ++i)
		for(short j = i+1; j <= N; ++j)
		{
			if(V[i] + V[j] > L) break;
			if(H.find(L-V[i]-V[j]) == H.end()) continue;
			pair<hash_multimap <int, short>::iterator, hash_multimap <int, short>::iterator> ret = H.equal_range(L-V[i]-V[j]);
			hash_multimap <int, short> :: iterator it;
			for(it = ret.first; it != ret.second; ++it)
				if(it->second > j)
					++Sol;
		}
	fout << Sol;
}

int main()
{
	citire();
	solve();
}