Pagini recente » Cod sursa (job #1869799) | Cod sursa (job #2012759) | Cod sursa (job #2289772) | Cod sursa (job #1019184) | Cod sursa (job #731140)
Cod sursa(job #731140)
#include<stdio.h>
#include<algorithm>
using namespace std;
int i,j,s,p,u,m,n,l,s1,nr1,a[1026];
int b[1000002],ap[1000002];
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d",&n);
scanf("%d",&l);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]<=1000000) ap[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]<=1000000) b[a[i]+a[j]]++;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(a[i]+a[j]<=l)
{
nr1=b[l-a[i]-a[j]];
s1=l-a[i]-a[j]-a[i];
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(a[m]>s1) u=m-1;
else
if(a[m]<s1) p=m+1;
else break;
}
if(p<=u) nr1=nr1-ap[s1];
s1=l-a[i]-a[j]-a[j];
p=1;
u=n;
while(p<=u)
{
m=(p+u)/2;
if(a[m]>s1) u=m-1;
else
if(a[m]<s1) p=m+1;
else break;
}
if(p<=u) nr1=nr1-ap[s1];
if(nr1>0)
s=s+nr1;
}
printf("%d\n",s/6);
return 0;
}