Pagini recente » Cod sursa (job #2036076) | Cod sursa (job #761740) | Cod sursa (job #97360) | Cod sursa (job #987626) | Cod sursa (job #694630)
Cod sursa(job #694630)
#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[999989];
void insert(int x)
{
H[x%999983].push_back(make_pair(x,make_pair(i,j)));
}
int OK(pair<int,pair<int,int> > X,int i,int j,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)
{
int q=x%999983;
for (vector<pair<int,pair<int,int> > >::iterator it=H[q].begin();it!=H[q].end();it++)
if (OK(*it,i,j,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]);
sort(a+1,a+n+1);
for (i=1;i<=n;++i)
for (j=i+1;j<=n;++j)
if (a[i]+a[j]>S) continue;
else 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);
}