Cod sursa(job #863446)

Utilizator ioanapopaPopa Ioana ioanapopa Data 23 ianuarie 2013 20:14:17
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<cstdio>
#include<vector>
#include<ext/hash_set>
 
using namespace std;
 
#define Nmax 101
 
__gnu_cxx::hash_set<int> H;
int n, S, aux[Nmax];
vector<int> sol;
 
int main() 
{
 
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
 
    int i, j, k, s;
    
	scanf("%d %d",&n,&S);
   
	for(i=1; i<=n; i++)
        scanf("%d",&aux[i]);
 
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++) 
			{
                s = aux[i] + aux[j] + aux[k];
                if(s < S)
                    H.insert(s);
            }
 
    s = -1;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++) 
			{
                s = aux[i] + aux[j] + aux[k];
                if(H.find(S-s) != H.end()) 
				{
                    sol.push_back(aux[i]);
                    sol.push_back(aux[j]);
                    sol.push_back(aux[k]);
                    S-=s;
                    i = j = k = n+1;
                }
            }
 
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++) 
			{
                s = aux[i] + aux[j] + aux[k];
                if(S == s) 
				{
                    printf("%d %d %d ",aux[i],aux[j],aux[k]);
                    for(vector<int>:: iterator it=sol.begin(); it!=sol.end(); ++it)
						printf("%d ",*it);					
                    return 0;
                }
            }
  
			printf("-1\n");
 
    return 0;
}