Pagini recente » Borderou de evaluare (job #886502) | Cod sursa (job #959434) | Cod sursa (job #917933) | Cod sursa (job #1557903) | Cod sursa (job #2184227)
#include<cstdio>
#include<vector>
#define MOD 666013
using namespace std;
int v[1025];
vector<pair<int,int> > Hash[666013];
int main ()
{freopen ("oite.in","r",stdin);
freopen ("oite.out","w",stdout);
int n,i,j,k,x,l,q,nr;
bool pp;
nr = 0;
scanf("%d%d",&n,&k);
for(i = 1; i <= n; i++)
scanf("%d",&v[i]);
for(i = 1; i <= n; i++)
for(j = n; j >= 1; j--)
if(j > i && v[i] + v[j] <= k)
{// numar perechile din Hash cu care perechea i,j poate juca
x = k - (v[i] + v[j]);
q = x % MOD;
for(l = 0; l < Hash[q].size(); l++)
if(Hash[q][l].first == x)
nr += Hash[q][l].second;
}
else if(j < i)
{// adaug perechea i,j in Hash
x = v[i] + v[j];
q = x % MOD;
pp = false;
for(l = 0; l < Hash[q].size(); l++)
if(Hash[q][l].first == x)
{Hash[q][l].second++;
pp = true;
l = Hash[q].size();
}
if(pp == false)
Hash[q].push_back(make_pair(x, 1));
}
printf("%d",nr);
return 0;
}