Pagini recente » Cod sursa (job #2620590) | Borderou de evaluare (job #2893730) | Cod sursa (job #1819888) | Cod sursa (job #2868850) | Cod sursa (job #1517781)
#include <fstream>
#include <vector>
#define MOD 666013
using namespace std;
ifstream f("oite.in");
ofstream g("oite.out");
vector <pair<int,int> > V[MOD],V2[MOD];
int C,L;
int Array[1030];
int N;
long long ans;
vector <pair<int,int> > :: iterator Find2(int value)
{
int List=value%MOD;
vector <int>:: iterator it;
for(auto it=V2[List].begin();it!=V2[List].end();it++)
{
if(it->first==value)
return it;
}
return V2[List].end();
}
void Insert2(int value)
{
int List=value%MOD;
auto it=Find2(value);
if(it==V2[List].end())
V2[List].push_back(make_pair(value,1));
else
it->second++;
}
vector <pair<int,int> >:: iterator Find(int value)
{
int List=value%MOD;
vector <int>:: iterator it;
for(auto it=V[List].begin();it!=V[List].end();it++)
{
if(it->first==value)
return it;
}
return V[List].end();
}
void Insert(int value)
{
int List=value%MOD;
auto it=Find(value);
if(it==V[List].end())
V[List].push_back(make_pair(value,1));
else
it->second++;
}
void Delete(int value)
{
int List=value%MOD;
auto it=Find(value);
if(it->second>1)
it->second--;
else
V[List].erase(it);
}
void Read()
{
f>>C>>L;
for(int i=1;i<=C;i++)
{
f>>Array[i];
Insert2(Array[i]);
}
}
void Solve()
{
for(int i=1;i<=C;i++)
for(int j=i+1;j<=C;j++)
{
int s=Array[i]+Array[j];
Insert(s);
}
for(int i=1;i<=C;i++)
for(int j=i+1;j<=C;j++)
{
int s=Array[i]+Array[j];
/*if(s>L/2)
continue;*/
if(s>L)
continue;
int List=(L-s)%MOD;
if(Find(L-s)==V[List].end())
continue;
int aux=Find(L-s)->second;
if(L-s-Array[i]>=0)
{
int point=(L-s-Array[i])%MOD;
auto it=Find2(L-s-Array[i]);
if(it!=V2[point].end())
{
aux-=it->second;
if(L-s-Array[i]==Array[i])
++aux;
}
}
if(L-s-Array[j]>=0)
{
int point=(L-s-Array[j])%MOD;
auto it=Find2(L-s-Array[j]);
if(it!=V2[point].end())
{
aux-=it->second;
if(L-s-Array[j]==Array[j])
++aux;
}
}
if(L-s==s)
++aux;
if(aux!=0)
{
int a;
a=0;
}
ans+=aux;
}
}
int main()
{
Read();
Solve();
g<<ans/6<<"\n";
return 0;
}