Pagini recente » Cod sursa (job #1974675) | Cod sursa (job #2986788) | Cod sursa (job #1737509) | Cod sursa (job #2727775) | Cod sursa (job #795353)
Cod sursa(job #795353)
#include <cstdio>
#include <vector>
using namespace std;
#define MOD 666013
#define CMAX 1025
struct sum2
{
int sum;
int nr;
};
vector<sum2> H[MOD];
int L, C;
int v[CMAX];
int get(int o1, int o2, int sum)
{
int mod = sum % MOD;
int nr = 0;
for(int i=0;i<H[mod].size();++i)
{
if(H[mod][i].sum == sum)
{
return H[mod][i].nr;
}
}
return 0;
}
void add(sum2 s)
{
int mod = s.sum%MOD;
for(int i=0;i<H[mod].size();++i)
{
if(H[mod][i].sum == s.sum)
{
H[mod][i].nr++;
return;
}
}
H[mod].push_back(s);
}
int main()
{
freopen("oite.in", "r", stdin);
freopen("oite.out", "w", stdout);
scanf("%d %d", &C, &L);
for(int i=0;i<C;++i)
{
scanf("%d", &v[i]);
}
/*
for(int i=0;i<C;++i)
{
for(int j=i+1;j<C;++j)
{
sum2 s;
s.nr = 0;
s.sum = v[i] + v[j];
add(s);
}
}
*/
long long sol = 0;
for(int i=0;i<C;++i)
{
for(int j=i+1;j<C;++j)
{
sol += get(i, j, L - v[i] - v[j]);
}
for(int j=0;j<i;++j)
{
sum2 s;
s.nr = 1;
s.sum = v[i] + v[j];
add(s);
}
}
printf("%lld", sol);
return 0;
}