Pagini recente » Monitorul de evaluare | Cod sursa (job #1752790) | Borderou de evaluare (job #1120398) | Borderou de evaluare (job #1894132) | Cod sursa (job #930862)
Cod sursa(job #930862)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("oite.in");
ofstream out ("oite.out");
const int key = 666013;
int V[1025],n,L,SOL;
vector<pair<int,int> > H[key];
void READ ()
{
in>>n>>L;
for( int i=1 ; i <= n ; ++i )
in>>V[i];
}
void INSERT ( int S )
{
int nod=S%key;
for( vector<pair<int,int> >::iterator it=H[nod].begin() ; it < H[nod].end() ; ++it )
if( it->first == S )
{
++it->second;
return;
}
H[nod].push_back(make_pair(S,1));
}
int FIND ( int S )
{
int nod=S%key;
for( vector<pair<int,int> >::iterator it=H[nod].begin() ; it < H[nod].end() ; ++it )
if( it->first == S )
return it->second;
return 0;
}
void SOLVE ()
{
for( int i=1 ; i < n ; ++i )
{
for( int j=i-1 ; j ; --j )
INSERT( V[i]+V[j] );
for( int j=i+2 ; j <= n ; ++j )
SOL+=FIND(L-V[i+1]-V[j]);
}
}
void PRINT ()
{
out<<SOL;
}
int main ()
{
READ ();
SOLVE ();
PRINT ();
return 0;
}