Pagini recente » Cod sursa (job #2527677) | Cod sursa (job #2515811) | Cod sursa (job #479607) | Cod sursa (job #1406220) | Cod sursa (job #598335)
Cod sursa(job #598335)
#include <fstream>
#include <vector>
using namespace std;
const char InFile[]="oite.in";
const char OutFile[]="oite.out";
const int MaxN=1024;
const int MOD=3033;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,S,V[MaxN],sol;
vector<int> H[MOD];
inline void add(int val)
{
if(val<0)
{
return;
}
int key=val%MOD;
H[key].push_back(val);
}
inline void erase(int val)
{
if(val<0)
{
return;
}
int key=val%MOD;
vector<int>::iterator it;
for(it=H[key].begin();it!=H[key].end();++it)
{
if(*it==val)
{
break;
}
}
if(it!=H[key].end())
{
if(*it==val)
{
*it=H[key][H[key].size()-1];
H[key].pop_back();
}
}
}
inline int count(int val)
{
if(val<0)
{
return 0;
}
int cnt=0;
int key=val%MOD;
vector<int>::iterator it;
for(it=H[key].begin();it!=H[key].end();++it)
{
if(*it==val)
{
++cnt;
}
}
return cnt;
}
int main()
{
fin>>N>>S;
for(register int i=0;i<N;++i)
{
fin>>V[i];
}
fin.close();
for(register int i=2;i<N;++i)
{
for(register int j=i+1;j<N;++j)
{
add(V[i]+V[j]);
}
}
for(register int i=1;i<N-2;++i)
{
for(register int j=0;j<i;++j)
{
sol+=count(S-V[i]-V[j]);
}
for(register int j=i+2;j<N;++j)
{
erase(V[i+1]+V[j]);
}
}
fout<<sol;
fout.close();
return 0;
}