Cod sursa(job #1335782)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 5 februarie 2015 21:18:11
Problema Oite Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream is("oite.in");
ofstream os("oite.out");

#define MOD 666013

unsigned long long N, x[1026], Sum, S, Sum2, Sol, Gate;
bool Found;
vector <pair<unsigned long long,int> > H[MOD+1];

int main()
{
    is >> N >> S;
    for ( int i = 1; i <= N; ++i )
        is >> x[i];

    for ( int i = 2; i < N; ++i )
    {
        for ( int j = i + 1; j <= N; ++j )
        {
            Sum = S - ( x[i] + x[j] );
            if ( Sum < 0 ) continue;
            Gate = Sum%MOD;
            if ( H[Gate].empty() == false )
            for ( int k = 0; k < H[Gate].size(); ++k )
            {
                if ( H[Gate][k].first == Sum )
                    Sol += H[Gate][k].second;
            }
        }

        for ( int j = 1; j < i; ++j )
        {
            Sum = x[i] + x[j];
            Gate = Sum % MOD;
            Found = false;
            if ( H[Gate].empty() == false )
            for ( int k = 0; k < H[Gate].size(); ++k )
            {
                if ( H[Gate][k].first == Sum )
                {
                    H[Gate][k].second++;
                    Found = true;
                    break;
                }
            }

            if ( Found == false )
                H[Gate].push_back(make_pair(Sum,1));
        }
    }

    os << Sol;

    is.close();
    os.close();
}