Pagini recente » Cod sursa (job #2086146) | Cod sursa (job #3177550) | Cod sursa (job #664039) | Cod sursa (job #1277352) | Cod sursa (job #997098)
Cod sursa(job #997098)
#include <fstream>
#include <utility>
#include <list>
using namespace std;
#define mod 666013
list<pair<int,int> > hash_t[mod];
list<pair<int,int> > hash_mic[mod];
list<pair<int,int> >::iterator find_t(int x)
{
int b=x%mod;
list<pair<int,int> >::iterator it;
for(it=hash_t[b].begin();it!=hash_t[b].end();it++)
if((it->first)==x)
break;
return it;
}
int count_t(int x)
{
if(x<0)
return 0;
int b=x%mod;
list<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;
}
void add_t(int x)
{
int b=x%mod;
list<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));
}
////////////////////////////////
list<pair<int,int> >::iterator find(int x)
{
int b=x%mod;
list<pair<int,int> >::iterator it;
for(it=hash_mic[b].begin();it!=hash_mic[b].end();it++)
if((it->first)==x)
break;
return it;
}
int count(int x)
{
if(x<0)
return 0;
int b=x%mod;
list<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;
}
void add(int x)
{
int b=x%mod;
list<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()
{
ifstream cin("oite.in");
ofstream cout("oite.out");
int n=0,l,rasp=0,sum,v[1029],i,j;
cin>>n>>l;
for(i=0;i<n;i++)
{
cin>>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];
rasp+=(count_t(sum));
//cout<<"crestem cu "<<count_t(sum)<<' '<<sum<<endl;
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++;
}
cout<<rasp/6<<'\n';
cin.close();
cout.close();
//system("PAUSE");
return 0;
}