Cod sursa(job #392364)

Utilizator Mishu91Andrei Misarca Mishu91 Data 7 februarie 2010 14:09:42
Problema Oite Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <map>
#include <ext/hash_map>

using namespace std;
using namespace __gnu_cxx;

#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)

const int MAX_N = 1034;

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

short N;
int L, V[MAX_N], Sol;
hash_map<int, vector <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[V[i] + V[j]].push_back(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;
			foreach(H[L-V[i]-V[j]])
				if(*it > j)
					++Sol;
		}
	fout << Sol;
}

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