Pagini recente » Cod sursa (job #622990) | Cod sursa (job #2958743) | Istoria paginii utilizator/misha_sofy | Rating Traian Simedru (tr41an) | Cod sursa (job #1607576)
#include <stdio.h>
#include <vector>
#include <utility>
#define nmax 1100
#define mod 100027
using namespace std;
int n,m,sol;
int t[nmax];
vector < pair<int,int> > g[mod+10];
void add_inhash(int x)
{
int y=x%mod;
for (int i=0;i<(int)g[y].size();i++)
if (g[y][i].first==x) {
g[y][i].second++; return;
}
g[y].push_back(make_pair(x,1));
}
void remove_fromhash(int x)
{
int y=x%mod;
for (int i=0;i<(int)g[y].size();i++)
if (g[y][i].first==x) {
g[y][i].second--;
if (g[y][i].second==0) g[y].erase(g[y].begin()+i);
return;
}
}
int nrhash(int x)
{
int y=x%mod;
for (int i=0;i<(int)g[y].size();i++)
if (g[y][i].first==x) return g[y][i].second;
return 0;
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&t[i]);
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
add_inhash(t[i]+t[j]);
for (int i=1;i<=n;i++) {
for (int j=i+1;j<=n;j++) remove_fromhash(t[i]+t[j]);
for (int j=1;j<=i-1;j++)
if (m-(t[i]+t[j])>0) sol=sol+nrhash(m-(t[i]+t[j]));
}
printf("%d",sol);
return 0;
}