Pagini recente » Cod sursa (job #246258) | Cod sursa (job #2132700) | Cod sursa (job #767851) | Cod sursa (job #949300) | Cod sursa (job #730534)
Cod sursa(job #730534)
#include<fstream>
#include<cmath>
#include<vector>
#define MOD 666013
using namespace std;
int n,L,v[1030];
struct Suma{int sum; vector <int> ind;};
vector <Suma> H[666013];
int sol;
inline void Citire()
{
int i;
ifstream fin("oite.in");
fin>>n>>L;
for(i=1;i<=n;i++)
fin>>v[i];
fin.close();
}
inline void Rezolvare()
{
int i,j,suma,poz;
Suma aux;
bool gasit;
vector <Suma>::iterator it;
vector <int>::iterator jt;
//Precalculare sume
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
suma=v[i]+v[j];
poz=suma%MOD;
gasit=false;
for(it=H[poz].begin();it!=H[poz].end() && !gasit;it++)
{
aux=*it;
if(aux.sum==suma)
{
aux.ind.push_back(i);
*it=aux;
gasit=true;
}
}
if(!gasit)
{
aux.sum=suma;
aux.ind.clear();
aux.ind.push_back(i);
H[poz].push_back(aux);
}
}
}
//Rezolvare
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
suma=L-v[i]-v[j];
if(suma>=0)
{
poz=suma%MOD;
gasit=false;
for(it=H[poz].begin();it!=H[poz].end() && !gasit;it++)
{
aux=*it;
if(aux.sum==suma)
{
gasit=true;
for(jt=aux.ind.begin();jt!=aux.ind.end();jt++)
{
if(*jt>j)
sol++;
}
}
}
}
}
}
}
inline void Afisare()
{
ofstream fout("oite.out");
fout<<sol<<"\n";
fout.close();
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}