Cod sursa(job #1787563)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 24 octombrie 2016 19:58:29
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<fstream>
#include<vector>
#include<iostream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
const int MOD = 666013;
const int NMAX = 105;

typedef struct num{
    int x,y,z;
    int sum;
}numar;
vector<numar> H[606227];
int v[NMAX];

void add(numar elem)
{

    int key = elem.sum % MOD;
    H[key].push_back(elem);
}

numar este(int elem)
{

    numar A;
    A.sum = -1;
    int key = elem % MOD;
    for(vector<numar>::iterator it = H[key].begin() ; it != H[key].end() ; ++it)
        if((*it).sum == elem){
            A = *it;
            return A;
        }
    return A;
}

int main()
{

    int N,S;
    in>>N>>S;
    for(int i = 1 ; i <= N ; ++i)
        in>>v[i];
    numar nr;
    for(int i = 1  ; i <= N  ; ++i)
        for(int j = 1 ; j <= N ; ++j)
            for(int k = 1 ; k <= N ; ++k){

                nr.sum = v[i] + v[j] + v[k];
                nr.x = v[i];
                nr.y = v[j];
                nr.z = v[k];
                add(nr);
            }
    numar n;
    for(int i = 1 ; i <= N ; ++i)
        for(int j = 1 ; j <= N ; ++j)
            for(int k = 1 ; k <= N ; ++k){
                n = este( S - (v[i] + v[j] + v[k]));
                if(n.sum != - 1){
                    out<<v[i]<<" "<<v[j]<<" "<<v[k]<<" "<<n.x<<" "<<n.y<<" "<<n.z;
                    return 0;
                }
            }
    out<<-1;
    return 0;
}