Cod sursa(job #1067935)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 27 decembrie 2013 17:59:31
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.45 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");

int n, s, nr[101], sum[1000001], i, j, k, l, m, p, st, dr, sc, mij, ok, c1, c2, c3, v[15], v2[15];
char poz[1000001][15];
int main()
{
    f>>n>>s;
    for (i=1; i<=n; i++)
        f>>nr[i];
    sort(nr + 1, nr + n + 1);
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
            for (k=1; k<=n; k++)
            {
                sum[++l]=nr[i] + nr[j] + nr[k];
                m=0;
                c1=i;
                c2=j;
                c3=k;
                while (c1!=0)
                {
                    poz[l][++m]=char(c1%10 + '0');
                    c1/=10;
                }
                poz[l][++m]=' ';
                while (c2!=0)
                {
                    poz[l][++m]=char(c2%10 + '0');
                    c2/=10;
                }
                poz[l][++m]=' ';
                while (c3!=0)
                {
                    poz[l][++m]=char(c3%10 + '0');
                    c3/=10;
                }
                poz[l][++m]=' ';
            }
    sort(sum + 1, sum + l);
    for (i=1; i<=l && ok==0; i++)
    {
        dr=l;
        st=1;
        sc=s-sum[i];
        while(st<=dr && ok==0)
        {
            mij = (st+dr)/2;
            if (sum[mij] == sc)
                ok=1;
            else if (sum[mij] < sc)
                st = mij + 1;
            else
                dr = mij - 1;
        }
    }
    i--;
    if (ok==1)
    {
        m=0;
        c1=0;
        int x=1;
        while (poz[i][++m] != 0)
        {
            if (poz[i][m] <= '9' && poz[i][m] >= '0')
            {
                c1 = (poz[i][m] - '0') * x + c1;
                x*=10;
            }
            if (poz[i][m] == ' ')
            {
                v[++p]=c1;
                c1=0;
                x=1;
            }
        }
        m=0;
        c1=0;
        x=1;
        while (poz[mij][++m] != 0)
        {
            if (poz[mij][m] <= '9' && poz[mij][m] >= '0')
            {
                c1 = (poz[mij][m] - '0') * x + c1;
                x*=10;
            }
            if (poz[mij][m] == ' ')
            {
                v[++p]=c1;
                c1=0;
                x=1;
            }
        }
        l=0;
        for (m=1; m<=12; m++)
            v2[m]=nr[v[m]];
        sort(v2 + 1, v2 + 6 + 1);
        for (m=1; m<=6; m++)
            g<<v2[m]<<" ";
    }
    else
    {
        g<<-1;
    }
    return 0;
}