Cod sursa(job #1880416)

Utilizator enacheionutEnache Ionut enacheionut Data 15 februarie 2017 19:00:22
Problema Oite Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
#include <iterator>
#include <algorithm>

using namespace std;

unsigned int sum;
unsigned int numberOfElements;
vector<unsigned int> elements;

void ReadInput()
{
    ifstream inputStream("oite.in");
    inputStream>> numberOfElements>> sum;
    copy_n(istream_iterator<unsigned int>(inputStream), numberOfElements, back_inserter(elements));
    inputStream.close();
}

unsigned int Solve()
{
    unordered_map<unsigned int , unsigned int> auxSum;
    unsigned int result = 0;

    for( unsigned int i = 0; i < numberOfElements - 1 && elements[i] <= sum; ++i )
    {
        for( unsigned int j = i + 1; j < numberOfElements && elements[i] + elements[j] <= sum; ++j )
            result += auxSum[ sum - elements[i] - elements[j]];

        for( unsigned int j = 0; j < i; ++j )
            ++auxSum[elements[i] + elements[j]];
    }
    return result;
}

void DisplayResult(unsigned int result)
{
    ofstream outputStream("oite.out");
    outputStream<< result;
    outputStream.close();
}

int main()
{
    ReadInput();
    sort(elements.begin(), elements.end());
    unsigned int result = Solve();
    DisplayResult(result);

    return 0;
}