Cod sursa(job #964728)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 22 iunie 2013 11:26:01
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <vector>

#define In "oite.in"
#define Out "oite.out"
#define MOD 600003
#define Nmax 1030
using namespace std;

class Hash
{
    public :
    inline void Add(int x)
    {
        int r = x% MOD;
        v[r].push_back(x);
    }
    inline int Query(int x)
    {
        int r = x%MOD,nr = 0;
        for(vector<int>::iterator it=v[r].begin();it!=v[r].end(); ++it)
            if(*it==x)
                ++nr;
        return nr;
    }
    private : vector<int>v[MOD];
};
Hash H;
int N, S, Sol,A[Nmax];
inline void Read()
{
    ifstream f(In);
    f >> N >> S;
    for(int i = 1 ;i <= N ; ++i)
        f>>A[i];
    f.close();
}

inline void Solve()
{
    int i,j;
    for(i = 1;i <= N; ++i)
    {
        for(j = i+1 ;j <= N; ++j)
            if(A[i] + A[j]<=S)
                Sol += H.Query(S-A[i] - A[j]);
        for(j = 1; j < i; ++j)
            H.Add(A[i] + A[j]);
    }
}

inline void Write()
{
    ofstream g(Out);
    g<<Sol<<"\n";
    g.close();
}

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}