Cod sursa(job #926614)

Utilizator The_Black_HunterBrehuescu Roland Cristian The_Black_Hunter Data 25 martie 2013 12:00:17
Problema Loto Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
int n, s, a[101], l, sol[7];
long suma[100001], suma_temporara;
short i, j, k;
bool sw;
int contine (int x)
{
    int ls, ld, mij;
    ls=1;
    ld=l;
    while(ls<=ld)
        {
            mij=(ls+ld)/2;
            if(x==suma[mij]) return 1;
            else if(x>suma[mij]) ls=mij+1;
            else ld=mij-1;
        }
    return 0;
}

int main()
{
    f>>n>>s;
    for(i=1; i<=n; i++)
    f>>a[i];
    for(i=1; i<=n; i++)
    for(j=i; j<=n; j++)
    for(k=j; k<=n; k++)
    if(a[i]+a[j]+a[k]<=s)
    suma[++l]=a[i]+a[j]+a[k];
    sort(suma+1, suma+1+l);
    for(i=1; i<=n&&!sw; i++)
    for(j=i; j<=n&&!sw; j++)
    for(k=j; k<=n&&!sw; k++)
        {
            suma_temporara=a[i]+a[j]+a[k];
            if(contine(s-suma_temporara))

                {
                    sol[1]=a[i];
                    sol[2]=a[j];
                    sol[3]=a[k];
                    sw=1;
                }
        }
    if(sw==0) g<<-1;
        else
        {
            s-=suma_temporara;
            sw=0;
            for(i=1; i<=n&&!sw; i++)
            for(j=i; j<=n&&!sw; j++)
            for(k=j; k<=n&&!sw; k++)
            if(a[i]+a[j]+a[k]==s)
                {
                    sol[4]=a[i];
                    sol[5]=a[j];
                    sol[6]=a[k];
                    sw=1;
                }
            for(i=1; i<=6; i++)
            g<<sol[i]<<' ';
        }
    f.close();
    g.close();
    return 0;
}