Cod sursa(job #172673)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 6 aprilie 2008 17:19:34
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include <stdio.h>
#include <algorithm>
#define NMAX 101

using namespace std;

int V[NMAX], A[NMAX*NMAX*NMAX], N, S;

int main()
{
        int i, j, k, p1, p2, na = 0, gata = 0;

        freopen("loto.in", "r", stdin);
        scanf("%d %d", &N, &S);
        for (i = 0; i < N; i++) scanf("%d", V+i);

        for (i = 0; i < N; i++)
            for (j = 0; j < N; j++)
                for (k = 0; k < N; k++) A[na++] = V[i]+V[j]+V[k];
                
        sort(&A[0], &A[na]);

        p1 = 0; p2 = na-1;
        while (gata == 0)
        {
                if (p1 > p2) gata = 1;
                if (A[p1]+A[p2] == S) gata = 1;
                else
                   if (A[p1]+A[p2] > S) p2--;
                   else
                      if (A[p1]+A[p2] < S) p1++;
        }
        freopen("loto.out", "w", stdout);
        if (p1 <= p2)
           for (i = 0; i < N; i++)
               for (j = 0; j < N; j++)
                   for (k = 0; k < N; k++)
                   {
                       if ((p1 >= 0) && ((V[i]+V[j]+V[k]) == A[p1]))
                       {
                          printf("%d %d %d ", V[i], V[j], V[k]);
                          p1 = -1;
                       }
                       if ((p2 >= 0) && ((V[i]+V[j]+V[k]) == A[p2]))
                       {
                           printf("%d %d %d ", V[i], V[j], V[k]);
                           p2 = -1;
                       }
                       if (p1+p2 == -2) i = j = k = 2*N;
                   }

        if (i < 2*N) printf("-1");
        printf("\n");
        
        return 0;
        
}