Cod sursa(job #1363350)

Utilizator cr7.stefyNedelcu Stefan-Marian cr7.stefy Data 26 februarie 2015 21:51:30
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");

int main()
{
    int i,j,k,t,n,v[110],v2[500000],s,c,sol=-1,flag1=0,flag2=0,st,dr,mij,vsol[10],p=1;
    in>>n>>s;
    for(i=1; i<=n; i++)
        in>>v[i];
    t=1;

    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++)
            {
                v2[t]=v[i]+v[j]+v[k];
                t++;
            }

    sort(v2+1,v2+t+1);

    for(i=1; i<=t; i++)
    {
        c=s-v2[i];
        st=1;
        dr=t;
        sol=-1;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(c<v2[mij])
                dr=mij-1;
            if(c>v2[mij])
                st=mij+1;
            if(c==v2[mij])
            {
                sol=v2[i];
                break;
            }
        }
        if(sol!=-1)
            break;



    }


    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            for(k=1; k<=n; k++)
            {
                if(v[i]+v[j]+v[k]==c && flag1==0)
                {
                    vsol[p]=v[i];
                    p++;
                    vsol[p]=v[j];
                    p++;
                    vsol[p]=v[k];
                    p++;
                    flag1=1;
                }
                if(v[i]+v[j]+v[k]==sol && flag2==0)
                {
                    vsol[p]=v[i];
                    p++;
                    vsol[p]=v[j];
                    p++;
                    vsol[p]=v[k];
                    p++;
                    flag2=1;
                }
                if(flag1==flag2 && flag1==1)
                    break;

            }
    p--;
    sort(vsol+1,vsol+p+1);
    if(flag1==flag2 && flag1==0)
        out<<-1;
    else
        for(i=1; i<=p; i++)
            out<<vsol[i]<<" ";






    return 0;
}