Pagini recente » Cod sursa (job #3001342) | Cod sursa (job #1251530) | Cod sursa (job #1800805) | Cod sursa (job #2919194) | Cod sursa (job #389308)
Cod sursa(job #389308)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define file_in "oite.in"
#define file_out "oite.out"
#define mod 1004567
#define Nmax 5297378
int n,s,v[Nmax],nr,x;
vector<int> G[mod+10];
char q[(1<<23)+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", &n, &s);
gets(q);
n=0;
i=0;
int l=strlen(q);
while(i<l)
{
x=0;
while(q[i]>='0' && q[i]<='9')
{
x=x*10+q[i]-'0';
i++;
}
v[++n]=x;
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;
}