Pagini recente » Cod sursa (job #2240698) | Cod sursa (job #2956827) | Cod sursa (job #1574996) | Cod sursa (job #559077) | Cod sursa (job #72175)
Cod sursa(job #72175)
using namespace std;
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <string>
#define r 17
#define maxn 166013
struct nod { int i, j;nod *next;};
nod *H[maxn];
int n, S;
int x[2048];
void insert(int i, int j)
{
nod *t=new nod;
t->i=i; t->j=j;
int h=((x[i]+x[j])*r)%maxn;
t->next=H[h];
H[h]=t;
}
int find(int i, int j)
{
int nr=0, sum=S-(x[i]+x[j]);
nod *t;
int h=((sum)*r)%maxn;
for(t=H[h];t;t=t->next)
if(x[t->i]+x[t->j]==sum)
if(t->i==i || t->i==j || t->j==i || t->j==j);
else //{ printf("%d %d %d %d\n",i, j, t->i, t->j);++nr;}
++nr;
return nr;
}
int main()
{
freopen("oite.in","r",stdin);
scanf("%d %d\n", &n, &S);
int i, j;
// init();
for(i=1;i<=n;++i) scanf("%d ", x+i);
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
insert(i,j);
long long nr=0;
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
nr+=(int)find(i, j);
freopen("oite.out","w",stdout);
printf("%lld\n", nr/6);
return 0;
}