Cod sursa(job #2665699)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 31 octombrie 2020 11:23:06
Problema Loto Scor 15
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <stdio.h>
#include <stdlib.h>
#define FUNC 666013 ///Functia va fi %FUNC

int v[100],h[FUNC][101],r[6]; ///Vor fi maxim 1000000 combinatii de 3 diferite, dar sper ca nu o sa fie atat de prost distribuite

int find(long long x){ ///Retuneaza pozitia lui x, sau 0 daca nu exista in vector
  int i=x%FUNC,j;
  for(j=1;j<=h[i][0];j++)
    if(h[i][j]==x)
      return j;
  return 0;
}
void add(long long x){
  int i=x%FUNC;
  if(find(x)==0){
    h[i][0]++; ///h[i][0], adcia primul element de pe fiecare linie, va avea marimea liniei respective
    h[i][h[i][0]]=x;
  }
}
int main(){
  int n,i,j,k,b,  u,max,p;
  long long s,a;
  FILE *fin, *fout;
  fin=fopen("loto.in","r");
  fscanf(fin,"%d%d",&n,&s);
  for(i=0;i<n;i++){
    fscanf(fin,"%d",&v[i]);
  }
  fclose(fin);

  a=-2;
  for(i=0;i<n;i++)
    for(j=i;j<n;j++)
      for(k=j;k<n;k++){
        if(find(s-((long long)v[i]+v[j]+v[k]))==0)
          add((long long)v[i]+v[j]+v[k]);
        //f[v[i]+v[j]+v[k]]++;
        else{
          a=s-((long long)v[i]+v[j]+v[k]);
          r[0]=v[i];
          r[1]=v[j];
          r[2]=v[k];
        }
      }

  i=0;
  while(i<n&&a>-1){
    j=i;
    while(j<n&&a>-1){
      k=j;
      while(k<n&&a>-1){
        if((long long)v[i]+v[j]+v[k]==a){
          a=-1;
          r[3]=v[i];
          r[4]=v[j];
          r[5]=v[k];
        }
        k++;
      }
      j++;
    }
    i++;
  }

  fout=fopen("loto.out","w");
  if(a==-2)
    fprintf(fout,"-1\n");
  else{
    ///Sortam cele 6 numere
    for(u=5;u>0;u--){
      max=r[0];
      p=0;
      for(i=1;i<=u;i++){
        if(r[i]>max){
          max=r[i];
          p=i;
        }
      }
      r[p]=r[u];
      r[u]=max;
    }
    fprintf(fout,"%d %d %d %d %d %d\n",r[0],r[1],r[2],r[3],r[4],r[5]);
  }
  fclose(fout);
  return 0;
}