Cod sursa(job #1217702)

Utilizator MaarcellKurt Godel Maarcell Data 7 august 2014 23:29:07
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <iostream>
#define prim 104729
using namespace std;

struct lista{
    int nr;
    lista *next;
};

int N,S,a[110]; lista *table[200000]; bool g;

void add(int nr){
    int ind=nr%prim;
    lista *aux=new lista;
    aux->nr=nr;
    aux->next=table[ind];
    table[ind]=aux;

}

bool cauta(int nr){
    int ind=nr%prim;
    for (lista *p=table[ind]; p!=NULL; p=p->next)
        if (p->nr==nr)
            return 1;

    return 0;
}

int main(){
    ifstream in("loto.in");
    ofstream out("loto.out");
    in >> N >> S;

    int i,j,k,aux;
    for (i=1; i<=N; i++)
        in >> a[i];

    for (i=1; i<=N; i++)
        for (j=i; j<=N; j++)
            for (k=j; k<=N; k++)
                add(a[i]+a[j]+a[k]);


    for (i=1; i<=N && !g; i++)
        for (j=i; j<=N && !g; j++)
            for (k=j; k<=N && !g; k++){
                g=cauta(S-(a[i]+a[j]+a[k]));
                if (g){
                    aux=S-(a[i]+a[j]+a[k]);
                    out << a[i] << " " << a[j] << " " << a[k] << " ";
                }
            }

    if (g==0){
        out << -1;
        return 0;
    }

    for (i=1; i<=N; i++)
        for (j=i; j<=N; j++)
            for (k=j; k<=N; k++)
                if (a[i]+a[j]+a[k]==aux){
                    out << a[i] << " " << a[j] << " " << a[k];
                    return 0;
                }
    return 0;
}