Cod sursa(job #3368518)

Utilizator ilinca_iordaniordan ilinca ilinca_iordan Data 14 octombrie 2026 22:31:21
Problema Loto Scor 5
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <stdio.h>
#include <stdbool.h>
int v[100];
#define Max 180000
int sume[Max];
int nr1[Max];
int nr2[Max];
int nr3[Max];
int cnt;
void swap(int *a,int *b){
    int r;
    r=*a;
    *a=*b;
    *b=r;
}
int cautbin(int x){
    int st=0,dr=cnt-1,raspuns=-1;
    while(st<=dr){
        int mij=(st+dr)/2;
        if(sume[mij]==x){
            raspuns=mij;
            dr=mij-1;
        }
        else if(sume[mij]<x){
            st=mij+1;
        }
        else{
            dr=mij-1;
        }
    }
    return raspuns;
}
int main()
{
    FILE *fin, *fout;
 
    fin=fopen("loto.in","r");
    fout=fopen("loto.out","w");
    
    int n,s;
    fscanf(fin, "%d %d", &n,&s);
    for(int i=0;i<n;i++){
        fscanf(fin, "%d", &v[i]);
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(v[j]>v[i]){
                swap(&v[i],&v[j]);
            }
        }
    }
    //fscanf(fin, "%d", &n);
    //fprintf(cautbin_out,"%d\n" , cerinta2(nr,n));
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            for(int k=j;k<n;k++){
                sume[cnt]=v[i]+v[j]+v[k];
                nr1[cnt]=v[i];
                nr2[cnt]=v[j];
                nr3[cnt]=v[k];
                cnt++;
            }
        }
    }
   
    bool gasit=false;
    for(int i=0;i<cnt&& gasit==false;i++){
        int q=s-sume[i],x=cautbin(q);
        if(x!=-1){
            fprintf(fout,"%d %d %d %d %d %d",nr1[i],nr2[i],nr3[i],nr1[x],nr2[x],nr3[x]);
            gasit=true;
        }
    }
    if(gasit==false){
        fprintf(fout,"-1");
    }
    fclose(fin);
    fclose(fout);
 
    return 0;
}