Cod sursa(job #1730636)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 17 iulie 2016 13:01:49
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <algorithm>
#include <vector>
#define MAXN 10007
#define val first
#define cnt second
using namespace std;

int C,L,v[1030];
long long Sol;
vector<pair<int,int>> H[MAXN];

void Insert(int V)
{
	int S=V%MAXN;
	for(int i=0;i<H[S].size();i++)
		if(H[S][i].val==V)
		{
			H[S][i].cnt++;
			return;
		}
	H[S].push_back(make_pair(V,1));
}
int Search(int V)
{
	int S=V%MAXN;
	for(int i=0;i<H[S].size();i++)
		if(H[S][i].val==V)
			return H[S][i].cnt;
	return 0;
}
int main()
{
    freopen("oite.in","r",stdin);
    freopen("oite.out","w",stdout);
	
	scanf("%d%d",&C,&L);
	for(int i=1;i<=C;i++)
		scanf("%d",&v[i]);
	for(int i=1;i<C;i++)
	{
		for(int j=i+1;j<=C;++j)
			if(L-v[i]-v[j]>=0)Sol+=Search(L-v[i]-v[j]);
		 for (int j=1;j<i;++j)
			Insert(v[i]+v[j]);
	}
	printf("%lld",Sol);
	return 0;
}