Pagini recente » Cod sursa (job #1919285) | Cod sursa (job #1416004) | Cod sursa (job #465305) | Cod sursa (job #241147) | Cod sursa (job #480789)
Cod sursa(job #480789)
#include <fstream>
#include<list>
#include <iostream>
#define NMAX 1026
#define h 699967
using namespace std;
int A[NMAX];
int NR;
int S,N;
list< pair<int,int> > List[h+2];
inline int hash(int x)
{
return x%h;
}
void rezolva()
{
int x,z;
for(int i=1;i<=N-3;i++)
for(int j=i+1;j<=N-2;j++)
{
x=S-(A[i]+A[j]);
if(x>0)
{
z=hash(x);
if(!List[z].empty())
for(list<pair<int,int> >::iterator itr=List[z].begin();itr!=List[z].end();++itr)
{
if(j<itr->second)
{
NR+=itr->first;
// cout<<itr->first<<" "<<x<<" "<<itr->second<<" "<<i<<" "<<j<<endl;
}
else break;
}
}
}
}
void init()
{
int x,contor;
for(int i=3;i<=N-1;i++)
for(int j=i+1;j<=N;j++)
{
x=hash(A[i]+A[j]);
contor=0;
list<pair<int,int> >::iterator itr=List[x].begin();
while(itr!=List[x].end() && !contor)
{
if(itr->second == i)
{
itr->first ++;
contor++;
}
itr++;
}
if(!contor)
List[x].push_front(make_pair(1,i));
}
}
void citire()
{
fstream fin("oite.in",ios::in);
fin>>N>>S;
for(register int i=1;i<=N;i++)
fin>>A[i];
fin.close();
}
void afisare()
{
fstream fout("oite.out",ios::out);
fout<<NR<<"\n";
fout.close();
}
int main(int argc, char* argv[])
{
citire();
init();
rezolva();
afisare();
}