Cod sursa(job #1165742)

Utilizator tudormaximTudor Maxim tudormaxim Data 2 aprilie 2014 21:27:51
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream in("loto.in");
ofstream out("loto.out");

int v[101],suma[1000001],n,i,j,k;

void f(int sc)
{
    for(i=1;i<=n;i++)
    {
        for(j=i;j<=n;j++)
        {
            for(k=j;k<=n;k++)
            {
                if(v[i]+v[j]+v[k]==sc)
                {
                    out<<v[i]<<' '<<v[j]<<' '<<v[k]<<'\n';
                    return;
                }
            }
        }
    }
}
int main()
{
    int s,l,pas,c,sc;
    in>>n>>s;
    for(i=1;i<=n;i++)
        in>>v[i];
    sort(v+1,v+n+1);
    c=1;
    for(i=1;i<=n;i++)
    {
         for(j=i;j<=n;j++)
        {
            for(k=j;k<=n;k++)
            {
                suma[c] =v[i]+v[j]+v[k];
                c++;
            }
        }
    }
    sort(suma+1,suma+c);

    for(i=1;i<=n;i++)
    {
         for(j=i;j<=n;j++)
        {
             for(k=j;k<=n;k++)
            {
                sc=s-v[i]-v[j]-v[k];
                l=0;
                pas = 1 << 19;
                while(pas)
                {
                    if(l+pas<c&&suma[l+pas]<sc)
                        l+=pas;
                    pas /= 2;
                }
                if(suma[l + 1] == sc)
                {
                    out<<v[i]<<' '<<v[j]<<' '<<v[k]<<' ';
                    f(sc);
                    return 0;
                }
            }
        }
    }
    out<<-1<<'\n';
    return 0;
    in.close();
    out.close();
}