Cod sursa(job #1971087)

Utilizator SirbuSirbu Ioan Sirbu Data 19 aprilie 2017 20:12:06
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define mod 666013

using namespace std;
ifstream fin ("loto.in");
ofstream fout ("loto.out");


struct loto {

  int x, y, z;
};

int v[105];
vector < loto > $$[mod+3];

int key (int a){
  return a%mod;
}

bool cautare(int &a, int &b, int &c, int val){

  if (val < 0)
    return 0;

  int k = key(val);

  vector < loto > :: iterator it;
  loto aux;
  for (it = $$[k].begin(); it != $$[k].end(); ++it){
    aux = *it;
    if (v[aux.x] + v[aux.y] + v[aux.z] == val){
      a = aux.x;
      b = aux.y;
      c = aux.z;
      return 1;
    }
  }
  return 0;
}

void adaug (int a, int b, int c, int val){

  if (!cautare(a,b,c,val))
    $$[key(val)].push_back((loto) {a,b,c});

}


int main (){

  int n,s;
  fin >> n >> s;
  for (int i = 1; i <= n; ++i)
    fin >> v[i];

  sort (v+1, v+n+1);
  for (int i = 1; i <= n; ++i){
    for (int j = i; j <= n; ++j){
      for (int k = j; k <= n; ++k){
          int sum = v[i] + v[j] + v[k];
          adaug(i,j,k, sum);
          int a,b,c;
          if (cautare(a,b,c,s-sum)){
            fout << v[i] << " " << v[j] << " " << v[k] << " " << v[a] << " " << v[b] << " " << v[c];
            return 0;
          }
      }
    }
  }
  fout << -1;
  return 0;
}