Cod sursa(job #1770866)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 4 octombrie 2016 22:23:46
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include <fstream>
#include <algorithm>
/*#define s first.first;
#define a first.second;
#define b second.first;
#define c second.second;*/
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
//pair<pair<int,int>,pair<int,int> > v[100002];

struct elem
{
    int s;
    int a;
    int b;
    int c;
} v[1000002];

int cmp(const elem &A, const elem &B)
{
    if(A.s!=B.s)
    {
        return A.s < B.s;
    }
    else
    {
        if(A.a!=B.a)
            return A.a<B.a;
        else
        {
            if(A.b!=B.b)
                return A.b<B.b;
            else
            {

                return A.c<B.c;

            }
        }
    }


}

int n,ss,kk,i,j,k,mij,st,dr,ok,u[102],val;
int main()
{



    f>>n>>ss;
    for(i=1; i<=n; i++)
    {
        f>>u[i];
    }
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
        {
            for(k=1; k<=n; k++)
            {
                v[++kk].s=u[i]+u[j]+u[k];
                v[kk].a=u[i];
                v[kk].b=u[j];
                v[kk].c=u[k];
            }
        }
    }
    sort(v+1, v+kk+1, cmp);
    for(i=1; i<=kk; i++)
    {
        st=1;
        dr=kk;
        val=ss-v[i].s;
        while(st<dr)
        {
            mij=(st+dr)/2;
            if(v[mij].s==val)
                {ok=1;break;}
            else
            {
                if(v[mij].s<val)
                {
                    st=mij+1;
                }
                else
                    dr=mij-1;
            }
        }
        if(ok==1)
            break;
    }
    if(ok==1)
    {
        g<<v[i].a<<" "<<v[i].b<<" "<<v[i].c<<" "<<v[mij].a<<" "<<v[mij].b<<" "<<v[mij].c;
    }
    else
        g<<"-1";
    return 0;
}