Cod sursa(job #1787559)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 24 octombrie 2016 19:55:38
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream>
#include<vector>
#include<iostream>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
const int MOD = 606227;
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 B;
    B.sum = -1;
    B.x = B.y = B.z = 0;
    numar *A = &B;
    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->sum = elem;
            A->x = (*it).x;
            A->y = (*it).y;
            A->z = (*it).z;
            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;
}