Cod sursa(job #694627)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 27 februarie 2012 22:22:29
Problema Oite Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#include<vector>
#include<algorithm>

using namespace std;

int j,n,S,i,sol,a[1029];
vector<pair<int,pair<int,int> > > H[9007];

void insert(int x)
{
	H[x%9007].push_back(make_pair(x,make_pair(i,j)));
}

int OK(pair<int,pair<int,int> > X,int x)
{
	if (X.first!=x) return 0;
	if (X.second.first==i) return 0;
	if (X.second.second==i) return 0;
	if (X.second.first==j) return 0;
	if (X.second.second==j) return 0;
	return 1;
}

void search(int x)
{
	for (vector<pair<int,pair<int,int> > >::iterator it=H[x%9007].begin();it!=H[x%9007].end();it++)
		if (OK(*it,x)) sol++;
}

int main()
{
	freopen("oite.in","r",stdin);
	freopen("oite.out","w",stdout);
	
	scanf("%d%d",&n,&S);
	
	for (i=1;i<=n;++i)
		scanf("%d",&a[i]);
	
	for (i=1;i<=n;++i)
		for (j=i+1;j<=n;++j)
			insert(a[i]+a[j]);
	for (i=1;i<=n;++i)
		for (j=i+1;j<=n;++j)
			if (S-a[i]-a[j]>0) search(S-a[i]-a[j]);
	printf("%d\n",sol/6);
}