Pagini recente » Cod sursa (job #1129705) | Cod sursa (job #2280820) | Cod sursa (job #2782579) | Cod sursa (job #966434) | Cod sursa (job #964554)
Cod sursa(job #964554)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int S,i,j,n,mod,a[1050];
long long sol;
vector < pair < int , int > > v[666013];
vector < pair < int , int > >::iterator it;
void push(int n)
{
int lin=n%mod;
for(it=v[lin].begin();it!=v[lin].end();it++)
if(it->first==n)
{
it->second++;
return ;
}
v[lin].push_back(make_pair(n,1));
}
int query(int n)
{
int lin=n%mod;
for(it=v[lin].begin();it!=v[lin].end();it++)
if(it->first==n) return it->second;
return 0;
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d",&n);
scanf("%d",&S);
mod=666013;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
push(a[1]+a[2]);
for(i=3;i<=n;i++)
{
for(j=i+1;j<=n;j++)
{
if(a[i]+a[j]>S) break;
sol+=query(S-a[i]-a[j]);
}
for(j=1;j<i;j++)
push(a[j]+a[i]);
}
printf("%lld\n",sol);
return 0;
}