Cod sursa(job #761137)

Utilizator visanrVisan Radu visanr Data 24 iunie 2012 22:00:21
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.39 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

#define pb push_back
int n, s, k, a, b, c, begin, end, mid, sum, gasit, x;
vector<int> val;
vector<int> v;


int main()
{
    freopen("loto.in", "r", stdin);
    freopen("loto.out", "w", stdout);
    int i, j;
    scanf("%i %i", &n, &s);
    for(i = 1; i <= n; i++)
    {
          scanf("%i", &x);
          val.pb(x);
    }
    for(i = 0; i < (int)(val.size()); i++)
          for(j = i; j < (int)(val.size()); j++)
                for(k = j; k < (int)(val.size()); k++)
                      v.pb(val[i] + val[j] + val[k]);
    sort(v.begin(), v.end());
    for(i = 0; i < (int)(val.size()); i++)
          for(j = i; j < (int)(val.size()); j++)
                for(k = j; k < (int)(val.size()); k++)
                      if(!gasit)
                      {
                                sum = val[i] + val[j] + val[k];
                                begin = -1, end = (int)(v.size());
                                while(end - begin > 1)
                                {
                                            mid = begin + (end - begin) / 2;
                                            if(sum + v[mid] > s) end = mid;
                                            else begin = mid;
                                }
                                if(v[mid] + sum == s)
                                {
                                          printf("%i %i %i ", val[i], val[j], val[k]);
                                          for(a = 0; a < (int)(val.size()); a++)
                                                for(b = 0; b < (int)(val.size()); b++)
                                                      for(c = 0; c < (int)(val.size()); c++)
                                                            if(!gasit)
                                                                      if(val[a] + val[b] + val[c] + sum == s)
                                                                                printf("%i %i %i\n", val[a], val[b], val[c]), gasit = 1;
                                          gasit = 1;
                                }
                      }
    if(!gasit) printf("-1\n");
    scanf("%i", &i);
    return 0;
}