Cod sursa(job #963933)

Utilizator raulmuresanRaul Muresan raulmuresan Data 19 iunie 2013 19:09:37
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <cstdio>
#include <algorithm>

using namespace std;
int i,aux,n,k,j,p,s,unu,t,m,doi,sum,y,l,sol,x;
int v[110],e[1000001];

int binary(int x)
{
int st=1,dr=l,mij;
while(st<=dr)
{
    mij=(st+dr)/2;
    if(x==e[mij]) return 1;
      else
          if(x<e[mij])dr=mij-1;
             else st=mij+1;
}
return 0;
}

int main()
{
    freopen ("loto.in","r",stdin);
    freopen ("loto.out","w",stdout);
    scanf("%d%d",&n,&sum);
    for(i=1;i<=n;i++){
    scanf("%d\n",&v[i]);
    //printf("%d ",v[i]);
    }


    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(y=1;y<=n;y++){
                l++;
                e[l]=v[i]+v[j]+v[y];
                //printf("%d\n",e[l]);
            }

    sort(e+1,e+1+l);

     for (i=1;i<=l;++i)
    if(binary(sum-e[i]))
    {sol=e[i];break;}
    //printf("%d\n",sol);

    if (sol==0) scanf("-1");
else
{
    x=sol;
    for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
          for (k=1; k<=n; k++)
             if(x==v[i]+v[j]+v[k]){
                 printf("%d %d %d ",v[i],v[j],v[k]);
                 i=n+1;
                 j=n+1;
                 k=n+1;
             }
    x=sum-sol;
    for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
          for (k=1; k<=n; k++)
             if(x==v[i]+v[j]+v[k]){

                 printf("%d %d %d ",v[i],v[j],v[k]);
                 i=n+1;
                 j=n+1;
                 k=n+1;
            }

}



}