Pagini recente » Cod sursa (job #2176696) | Cod sursa (job #794710) | Cod sursa (job #3001118) | Cod sursa (job #2399553) | Cod sursa (job #1820449)
#include<stdio.h>
#include<vector>
using namespace std;
#define MOD ((1<<20)-1)
int v[1025];
struct bine { int sum ; int o1 ; int o2 ;};
vector<bine>h[MOD+1];
bine p;
void add ( int pi , int pj ){
int x;
p.sum=v[pi]+v[pj];
p.o1=pi;
p.o2=pj;
x=p.sum&MOD;
h[x].push_back(p);
}
int check ( int suma, int pi, int pj){
int pp,x,i,j;
x=suma&MOD;
int cate=0;
for(i=0;i<h[x].size();i++)
if(h[x][i].sum==suma)
if(pj < h[x][i].o1)
cate++;
return cate;
}
int main(){
int n,l,i,j,c,r;
long long cate;
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d%d",&n,&l);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(v[i]+v[j] <= l)
add(i,j);
cate=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(v[i] + v[j] <= l)
{
c=l-v[i]-v[j];
r=check(c,i,j);
cate+=r;
}
printf("%lld\n",cate);
return 0;
}