Pagini recente » Cod sursa (job #2862470) | Cod sursa (job #3241239) | Cod sursa (job #3124135) | Cod sursa (job #8213) | Cod sursa (job #577360)
Cod sursa(job #577360)
#include<fstream>
#include<vector>
#include<algorithm>
#include<iostream>
#define MOD 1000003
using namespace std;
int c[1025],N,S;
vector< pair<int,int> > H[MOD];
void insert(int x)
{
int key=x%MOD;
for(vector< pair<int,int> >::iterator it = H[key].begin();it!=H[key].end();++it)
if(it->first == x){++it->second;return;}
H[key].push_back(make_pair(x,1));
}
int numara(int x)
{
int key = x%MOD;
for(vector< pair<int,int> >::iterator it = H[key].begin();it!=H[key].end();++it)
if(it->first == x)return it->second;
return 0;
}
void erase(int x)
{
int key=x%MOD;
for(vector< pair<int,int> >::iterator it = H[key].begin();it!=H[key].end();++it)
if(it->first == x && it->second)
{
--it->second;
return;
}
}
int main()
{
ifstream f("oite.in");
f>>N>>S;
int i,j;
for(i=1;i<=N;++i)
f>>c[i];
sort(c+1,c+N+1);
for(i=3;i<N;++i)
for(j=i+1;j<=N;++j)
insert(c[i] + c[j]);
int cnt=0,aux;
for(i=2;i<=N;++i)
{
for(j=1;j<i;++j)
{
aux = numara(S-c[i]-c[j]);
cnt+=aux;
}
for(j=i+2;j<=N;++j)
erase(c[i+1]+c[j]);
}
ofstream g("oite.out");
g<<cnt<<"\n";
g.close();
return 0;
}