Pagini recente » Cod sursa (job #1574201) | Cod sursa (job #624897) | Cod sursa (job #2704579) | Cod sursa (job #1149087) | Cod sursa (job #652249)
Cod sursa(job #652249)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define file_in "oite.in"
#define file_out "oite.out"
#define nmax (1<<10)
#define mod 1000333
int N,S,M,V[nmax+10],i,ans=0,j;
vector<int> H[mod];
void inserare(int value){
int key=value%mod;
H[key].push_back(value);
}
int cauta(int value){
int key=value%mod;
int nr=0;
vector<int> :: iterator it;
for (it=H[key].begin();it!=H[key].end();++it)
if (*it==value)
nr++;
return nr;
}
void sterge(int value){
int key=value%mod;
vector<int> :: iterator it;
for (it=H[key].begin();it!=H[key].end();++it)
if (*it==value){
H[key].erase(it);
return;
}
}
int main(){
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);
M=0;
for (i=3;i<=N;++i)
for (j=i+1;j<=N;++j)
inserare(V[i]+V[j]);
//sort(H+1,H+M+1);
for (j=2;j<=N-2;++j){
for (i=1;i<j;++i)
ans+=cauta(S-V[i]-V[j]);
for (i=j+2;i<=N;++i)
sterge(V[j+1]+V[i]);
}
printf("%d\n", ans);
return 0;
}