Pagini recente » Cod sursa (job #21931) | Cod sursa (job #2685697) | Cod sursa (job #3158529) | Cod sursa (job #1908098) | Cod sursa (job #197962)
Cod sursa(job #197962)
#include<stdio.h>
using namespace std;
#define maxh 666013
#define Nmax 1024
FILE*f=fopen("oite.in","r");
FILE*g=fopen("oite.out","w");
struct node
{
short i,j;
node *urm;
};
node *H[maxh];
int a[Nmax+5],sol;
int S,n;
void read()
{
fscanf(f,"%d%d",&n,&S);
int i;
for(i=1;i<=n;++i) fscanf(f,"%d",&a[i]);
}
inline void find(int i, int j) //Pt doua oi fixate, caut celelalte oi [cu suma s-a[i]-a[j]].
{
int s;
s=S-a[i]-a[j];
if(s<=0);
else
{
int h=s%maxh;
node *q;
for(q=H[h];q;q=q->urm)
{
if(a[q->i]+a[q->j] == s)
if( q->i==i || q->j==j || q->j==i || q->i==j || i==j || q->i==q->j);
else
{
++sol;
}
}
}
}
inline void insert(int i, int j)
{
int h=(a[i]+a[j])%maxh;
node *p;
p=new node;
p->i=i;
p->j=j;
p->urm=H[h];
H[h]=p;
}
void solve()
{
int i,j;
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
insert(i,j);
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
{
find(i,j);
}
fprintf(g,"%d\n",sol/6);
}
int main()
{
read();
solve();
return 0;
}