Cod sursa(job #1725053)

Utilizator danstefanDamian Dan Stefan danstefan Data 4 iulie 2016 20:05:11
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <bits/stdc++.h>
using namespace std;
int n,s,i,v[110],in,sf,mid,r,val,x[1000010],j,k,ans,p,S;
bool ok,OK1,OK2;
int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    scanf("%d%d",&n,&S);
    for(i=1; i<=n; ++i)
        scanf("%d",&v[i]);
    for(i=1; i<=n; ++i)
    {
        s=v[i];
        for(j=1; j<=n; ++j)
        {
            s=v[i]+v[j];
            for(k=1; k<=n; ++k)
            {
                s=v[i]+v[j];
                s+=v[k];
                x[++p]=s;
            }
        }
    }
    sort(x+1,x+p+1);
    for(i=1; i<=p; ++i)
    {
        val=S-x[i];
        in=1;
        sf=p;
        while(in<=sf)
        {
            mid=(in+sf)/2;
            if(x[mid]==val)
            {
                ans=x[i];
                ok=true;
                in=sf+1;
                i=p+1;
            }
            else if(val<x[mid])sf=mid-1;
            else in=mid+1;
        }
    }
    if(!ok)printf("%d\n",-1);
    else
    {
        for(i=1; i<=n; ++i)
        {
            s=v[i];
            for(j=1; j<=n; ++j)
            {
                s=v[i]+v[j];
                for(k=1; k<=n; ++k)
                {
                    s=v[i]+v[j];
                    s+=v[k];
                    if(s==val&&!OK1)
                    {
                        printf("%d %d %d ",v[i],v[j],v[k]);
                        OK1=true;
                    }
                    if(s==ans&&!OK2)
                    {
                        printf("%d %d %d ",v[i],v[j],v[k]);
                        OK2=true;
                    }
                    if(OK1&&OK2)
                    {
                        i=n+1;
                        j=n+1;
                        k=n+1;
                    }
                }
            }
        }
    }
    return 0;
}