Pagini recente » Cod sursa (job #604035) | Cod sursa (job #997147)
Cod sursa(job #997147)
#include <cstdio>
#include <utility>
#include <vector>
using namespace std;
#define mod 66013
vector<pair<int,int> > hash_t[mod];
vector<pair<int,int> > hash_mic[mod];
vector<pair<int,int> >::iterator find_t(int x)
{
int b=x%mod;
vector<pair<int,int> >::iterator it;
for(it=hash_t[b].begin();it!=hash_t[b].end();it++)
if((it->first)==x)
break;
return it;
}
inline int count_t(int x)
{
int b=x%mod;
vector<pair<int,int> >::iterator it;
for(it=hash_t[b].begin();it!=hash_t[b].end();it++)
if((it->first)==x)
return (it->second);
return 0;
}
inline void add_t(int x)
{
int b=x%mod;
vector<pair<int,int> >::iterator it=find_t(x);
if(it!=hash_t[b].end())
(it->second)++;
else
hash_t[b].push_back(make_pair(x,1));
}
////////////////////////////////
vector<pair<int,int> >::iterator find(int x)
{
int b=x%mod;
vector<pair<int,int> >::iterator it;
for(it=hash_mic[b].begin();it!=hash_mic[b].end();it++)
if((it->first)==x)
break;
return it;
}
inline int count(int x)
{
if(x<0)
return 0;
int b=x%mod;
vector<pair<int,int> >::iterator it;
for(it=hash_mic[b].begin();it!=hash_mic[b].end();it++)
if((it->first)==x)
return (it->second);
return 0;
}
inline void add(int x)
{
int b=x%mod;
vector<pair<int,int> >::iterator it=find(x);
if(it!=hash_mic[b].end())
(it->second)++;
else
hash_mic[b].push_back(make_pair(x,1));
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
int n=0,l,rasp=0,sum,v[1029],i,j;
scanf("%d%d",&n,&l);
for(i=0;i<n;i++)
{
scanf("%d",&v[i]);
add(v[i]);
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
add_t(v[i]+v[j]);
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
sum=l-v[i]-v[j];
if(sum<0)
continue;
rasp+=(count_t(sum));
rasp-=(count(sum-v[i]));
rasp-=(count(sum-v[j]));
if((v[i]+v[j])==sum)
rasp++;
if(v[i]==(sum-v[i]))
rasp++;
if(v[j]==(sum-v[j]))
rasp++;
}
printf("%d\n",(rasp>>1)/3);
return 0;
}