Cod sursa(job #2647341)

Utilizator maria_neagoieMaria Neagoie maria_neagoie Data 3 septembrie 2020 23:45:50
Problema Loto Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX=100;
int v[NMAX+5];
struct SUMA_3_NUMERE
{
    int t1,t2,t3,s;
};
SUMA_3_NUMERE s3[NMAX*NMAX*NMAX+5];
bool cmp(SUMA_3_NUMERE a,SUMA_3_NUMERE b)
{
    return a.s<b.s;
}
int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int n,suma,i,j,k,m=0,st,dr;
    bool gasit=0;
    scanf("%d%d",&n,&suma);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    //formam toate sumele de 3 nr
    for(i=1;i<=n;i++)
    {
        for(j=i;j<=n;j++)
        {
            for(k=j;k<=n;k++)
            {
                m++;
                s3[m].t1=v[i];
                s3[m].t2=v[j];
                s3[m].t3=v[k];
                s3[m].s=v[i]+v[j]+v[k];
            }
        }
    }
    //pentru a forma sumele de 6 numere avem nevoie de doua grupe de cate 3-doua pozitii din vectorul s3; cautam binar cele doua grupe care au impreuna suma s
    sort(s3+1,s3+m+1,cmp);
    st=1;
    dr=m;
    while(st<=dr && !gasit)
    {
        if(s3[st].s+s3[dr].s==suma)
        {
            printf("%d %d %d %d %d %d",s3[st].t1,s3[st].t2,s3[st].t3,s3[dr].t1,s3[dr].t2,s3[dr].t3);
            gasit=1;
        }
        else
        {
            if(s3[st].s+s3[dr].s<suma)
                st++;
            else
                dr--;
        }
    }
    if(!gasit)
        printf("-1");
    return 0;
}