Cod sursa(job #3368499)

Utilizator ilinca_iordaniordan ilinca ilinca_iordan Data 14 octombrie 2026 21:33:27
Problema Loto Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.78 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]);
    }
    //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++;
            }
        }
    }
    for(int i=0;i<cnt;i++){
        for(int j=i;j<cnt;j++){
            if(sume[i]>sume[j]){
                swap(&sume[i],&sume[j]);
                swap(&nr1[i],&nr1[j]);
                swap(&nr2[i],&nr2[j]);
                swap(&nr3[i],&nr3[j]);
            }
        }
    }
    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;
}