Cod sursa(job #760201)

Utilizator belginstirbuasdf asdf belginstirbu Data 20 iunie 2012 15:51:08
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <fstream>
#include <algorithm>

using std::ifstream;
using std::ofstream;

void display(ofstream &out, unsigned int *numbers, unsigned int numberOfNumbers, unsigned long sum)
{
    
    for(unsigned int a = 0; a < numberOfNumbers; ++a)
        for(unsigned int b = a; b < numberOfNumbers; ++b)
            for(unsigned c = b; c < numberOfNumbers; ++c)
                if(numbers[a] + numbers[b] + numbers[c] == sum)
                {
                    out << numbers[a] << ' ' << numbers[b] << ' ' << numbers[c];
                    return;
                }
}

int main(void)
{

    unsigned long sum;
    unsigned long partialSums[171700];
    unsigned int numbers[100];
    unsigned int numberOfNumbers;
    
    ifstream in("loto.in");
    in >> numberOfNumbers >> sum;
    
    for(unsigned int i = 0; i < numberOfNumbers; ++i)
        in >> numbers[i];
    
    unsigned int k = 0;
    for(unsigned int a = 0; a < numberOfNumbers; ++a)
        for(unsigned int b = a; b < numberOfNumbers; ++b)
            for(unsigned c = b; c < numberOfNumbers; ++c)
                partialSums[k++] = numbers[a] + numbers[b] + numbers[c];
    
    std::sort(partialSums, partialSums + k);
    
    ofstream out("loto.out");
    
    for(unsigned int i = 0; i < k; ++i)
        if(std::binary_search(partialSums, partialSums + k, sum - partialSums[i]))
        {
            display(out, numbers, numberOfNumbers, partialSums[i]);
            out << ' ';
            display(out, numbers, numberOfNumbers, sum - partialSums[i]);
            
            out.close();
            return 0;
        }
    
    out << -1;
    out.close();
    return 0;
}