Pagini recente » Cod sursa (job #631322) | Cod sursa (job #1316798) | Cod sursa (job #994710) | Cod sursa (job #857505) | Cod sursa (job #389294)
Cod sursa(job #389294)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define file_in "oite.in"
#define file_out "oite.out"
#define mod 666013
#define Nmax (1<<20)+3
int n,s,v[Nmax],nr;
vector<int> G[mod+10];
void add(int x)
{
int k=x%mod;
G[k].push_back(x);
}
int find(int x)
{
vector<int> :: iterator it;
int k=x%mod,cnt;
cnt=0;
for (it=G[k].begin();it!=G[k].end();++it)
if (*it==x)
cnt++;
return cnt;
}
void sterge(int x)
{
int k=x%mod;
vector<int> :: iterator it;
for (it=G[k].begin();it!=G[k].end();++it)
if (*it==x)
{
G[k].erase(it);
return ;
}
}
int main()
{
int i,j;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &n, &s);
for (i=1;i<=n;++i)
{
scanf("%d", &v[i]);
}
sort(v+1,v+n+1);
for (i=3;i<n;++i)
for (j=i+1;j<=n;++j)
add(v[i]+v[j]);
nr=0;
for (j=2;j<n-1;++j)
{
for (i=1;i<j;++i)
nr+=find(s-v[i]-v[j]);
for (i=j+2;i<=n;++i)
sterge(v[j+1]+v[i]);
}
printf("%d\n", nr);
fclose(stdin);
fclose(stdout);
return 0;
}