Pagini recente » Cod sursa (job #2344921) | Cod sursa (job #3161034) | Cod sursa (job #3149320) | Cod sursa (job #1738521) | Cod sursa (job #2513836)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("oite.in");
ofstream fout("oite.out");
#define ll long long
#define MOD 6013
#define x first
#define y second
#define mp make_pair
vector < pair< pair<int,int>,int> > SumHash[MOD];
ll L,S=0;
int n,v[2024],ok=0,nr=0;
void Read()
{
fin>>n>>L;
for(int i=1;i<=n;i++)
fin>>v[i];
}
void Push_Hash(int i, int j, int k, int m)
{
}
void Push_Sum(int i, int j)
{
S=v[i]+v[j];
int l=S%MOD;
SumHash[l].push_back(mp(mp(i,j),S));
}
void FirstHash()
{
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
Push_Sum(i,j);
}
}
void FindOptim(int sum, int i, int j)
{
int l=sum%MOD;
for(unsigned ct=0;ct<SumHash[l].size();ct++)
{
int a=SumHash[l][ct].x.x;
int b=SumHash[l][ct].x.y;
int c=SumHash[l][ct].y;
if(c==sum)
{
if(i!=a && i!=b && j!=a && j!=b)
{
ok=0;
Push_Hash(i,j,a,b);
if(!ok)
nr++;
}
}
}
}
void SecondHash()
{
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
{
int S=v[i]+v[j];
int Find=L-S;
FindOptim(Find,i,j);
}
}
}
int main()
{
Read();
FirstHash();
SecondHash();
fout<<nr<<'\n';
}