Pagini recente » Cod sursa (job #2026246) | Cod sursa (job #838058) | Cod sursa (job #2947263) | Cod sursa (job #2483358) | Cod sursa (job #694381)
Cod sursa(job #694381)
#include<stdio.h>
#include<vector>
#include<algorithm>
#define MOD 676513
#define Nmax 1025
#define pb push_back
#define mp make_pair
#define s first
#define x1 second.first
#define x2 second.second
using namespace std;
int j,n,S,i,sol,a[Nmax];
vector<pair<int,pair<int,int> > > H[Nmax];
vector<pair<int,pair<int,int> > >::iterator it;
void insert(int x)
{
H[x%MOD].pb(mp(x,mp(i,j)));
}
int OK(pair<int,pair<int,int> > X,int i,int j,int x)
{
if (X.s!=x) return 0;
if (X.x1==i) return 0;
if (X.x2==i) return 0;
if (X.x1==j) return 0;
if (X.x2==j) return 0;
return 1;
}
void search(int x)
{
for (it=H[x%MOD].begin();it!=H[x%MOD].end();it++)
if (OK(*it,i,j,x))
sol++;
}
int main()
{
freopen("oite.in","r",stdin);
freopen("oite.out","w",stdout);
scanf("%d%d",&n,&S);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
if (i!=j) insert(a[i]+a[j]);
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
if (i!=j) search(S-a[i]-a[j]);
printf("%d\n",sol/6);
}