Pagini recente » Cod sursa (job #1732273) | Cod sursa (job #2403414) | Cod sursa (job #490294) | Cod sursa (job #2054302) | Cod sursa (job #2466150)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream in("oite.in");
ofstream out("oite.out");
const int dim = 1030;
const int MOD = 100021;
vector < pair<int,int> > h[MOD];
int n,a[dim],suma;
long long int ans = 0;
void Adauga(int val,int cate)
{
int k = val%MOD;
vector < pair<int,int> >:: iterator it;
for (it = h[k].begin(); it != h[k].end(); it++)
{
if ((*it).first == val)
{
(*it).second++;
return ;
}
}
h[k].push_back(make_pair(val,cate));
}
int CNT(int val)
{
int k = val%MOD;
vector < pair<int,int> >:: iterator it;
for (it = h[k].begin(); it != h[k].end(); it++)
{
if ((*it).first == val)
{
return (*it).second;
}
}
return 0;
}
int main()
{
in >> n >> suma;
for (int i=1; i<=n; i++)
{
in >> a[i];
}
for (int i=1; i<=n; i++)
{
for (int j=i+1; j<=n; j++)
{
if (a[i] + a[j] <= suma)
{
ans += CNT(suma-a[i]-a[j]);
}
}
for (int j=i-1; j>=1; j--)
{
Adauga(a[i]+a[j],1);
}
}
out << ans;
return 0;
}