Mai intai trebuie sa te autentifici.
Cod sursa(job #1312029)
Utilizator | Data | 8 ianuarie 2015 20:25:06 | |
---|---|---|---|
Problema | Oite | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.21 kb |
#include<bits/stdc++.h>
using namespace std;
struct cell
{
int valoare,frecv;
};
const int MODULO=524288;
const int NMAX=1025;
int n,L,a[NMAX];
vector<cell>H[MODULO];
vector<cell>::iterator it;
cell k;
int sol;
inline int Add(int val,int ok)
{
int aux=val&(MODULO-1);
for (it=H[aux].begin();it!=H[aux].end();it++)
if ((*it).valoare==val)
{
if (ok==0) (*it).frecv++;
if (ok==1) (*it).frecv--;
if (ok==2) return (*it).frecv;
return 0;
}
if (ok==0)
{
k.valoare=val;
k.frecv=1;
H[aux].push_back(k);
}
return 0;
}
int main()
{
int i,j;
ifstream fin("oite.in");
fin>>n>>L;
for (i=1;i<=n;i++) fin>>a[i];
fin.close();
for (i=2;i<n;i++)
for (j=i+1;j<=n;j++)
Add(a[i]+a[j],0);
for (i=2;i<(n-1);i++)
{
for (j=i+1;j<=n;j++) Add(a[i]+a[j],1);
for (j=1;j<i;j++)
if ((a[i]+a[j])<=L)
sol+=Add(L-a[i]-a[j],2);
}
ofstream fout("oite.out");
fout<<sol<<"\n";
fout.close();
return 0;
}