Cod sursa(job #14735)

Utilizator astronomyAirinei Adrian astronomy Data 9 februarie 2007 16:50:32
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;

int N, S, V[128], s1, s2, oksol;
set<int> A;

void solve(void)
{
    int i, j, k;

    for(i = 1; i <= N; i++)
     for(j = i; j <= N; j++)
      for(k = j; k <= N; k++)
        A.insert(V[i]+V[j]+V[k]);

    for(i = 1; i <= N; i++)
     for(j = i; j <= N; j++)
      for(k = j; k <= N; k++)
      {
            s1 = V[i]+V[j]+V[k], s2 = S-s1;
            if(A.find(s2) != A.end())
            {
                oksol = 1;
                return ;
            }
      }
}

int SOL[16];

void baga(int s)
{
    int i, j, k;
    for(i = 1; i <= N; i++)
     for(j = i; j <= N; j++)
      for(k = j; k <= N; k++)
       if(V[i]+V[j]+V[k] == s)
       {
            SOL[++SOL[0]] = V[i], SOL[++SOL[0]] = V[j];
            SOL[++SOL[0]] = V[k];
            return ;
       }
}

int main(void)
{
    freopen("loto.in", "rt", stdin);
    freopen("loto.out", "wt", stdout);

    int i, j, k;

    scanf("%d %d\n", &N, &S);
    for(i = 1; i <= N; i++)
        scanf("%d ", &V[i]);

    solve();

    if(oksol == 0)
        printf("-1\n");
    else
    {
        baga(s1), baga(s2);
        for(i = 1; i < 6; i++)
            printf("%d ", SOL[i]);
        printf("%d\n", SOL[6]);
    }

    return 0;
}