Cod sursa(job #1703787)

Utilizator cella.florescuCella Florescu cella.florescu Data 17 mai 2016 17:27:33
Problema Loto Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstdio>
#include <vector>
#define MAXN 100
#define MOD 1299721

using namespace std;

struct suma{
  int a, b, c, s;
} sume[MAXN*MAXN*MAXN], ans1, ans2;

vector <suma> lst[MOD];

inline suma myfind(int val){
  int p=val%MOD;
  for(vector <suma>::iterator it=lst[p].begin(); it!=lst[p].end(); it++)
    if(it->s==val)
      return *it;
  return {-1, -1, -1, -1};
}

inline void myadd(suma val){
  suma x=myfind(val.s);
  if(x.s==-1)
    lst[val.s%MOD].push_back(val);
}

int v[MAXN];

int main()
{
    FILE *fin, *fout;
    int n, i, j, k, m, sum, sol;
    fin=fopen("loto.in", "r");
    fscanf(fin, "%d%d", &n, &sum);
    for(i=0; i<n; i++)
      fscanf(fin, "%d", &v[i]);
    fclose(fin);
    m=0;
    for(i=0; i<n; i++)
      for(j=i; j<n; j++)
        for(k=j; k<n; k++)
          sume[m++]={v[i], v[j], v[k], v[i]+v[j]+v[k]};
    for(i=sol=0; i<m && sol==0; i++){
      ans2=myfind(sum-sume[i].s);
      if(ans2.s!=-1){
        ans1=sume[i];
        sol=1;
      }
      myadd(sume[i]);
    }
    fout=fopen("loto.out", "w");
    if(sol)
      fprintf(fout, "%d %d %d %d %d %d\n", ans1.a, ans1.b, ans1.c, ans2.a, ans2.b, ans2.c);
    else
      fprintf(fout, "-1\n");
    fclose(fout);
    return 0;
}