Cod sursa(job #253489)

Utilizator ConsstantinTabacu Raul Consstantin Data 5 februarie 2009 20:44:11
Problema Loto Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>  
#include <algorithm>  
  
using namespace std;  
  
  
class tri  
{  
public:  
    int x, y, z;  
  
    void init(int a, int b, int c)  
    {  
        x = a, y = b, z = c;  
    }  
    int sum()  
    {  
        return x + y + z;  
    }  
};  
tri v[101*101*101];
unsigned int nr[105],m,k,d;
int i,j,l,n,p,q,mij ;

int cmp(tri a,tri b)
       {return a.sum()<b.sum();}
int main(){
freopen("loto.in","r",stdin);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
        scanf("%d",&nr[i]);

for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
                for(l=1;l<=n;l++)
                 v[++k].init(nr[i],nr[j],nr[l]);

sort(v+1,v+1+k,cmp);

freopen("loto.out","w",stdout);
for(i=1;i<=n;++i)
for(j=i;j<=n;++j)
for(l=j;l<=n;++l)
        {d=m-nr[i]-nr[j]-nr[l];
        if(d>0){
         p=1;q=k;
         while(p<=q)
                {mij=(p+q)>>1;
                if(v[mij].sum()==d)
         {printf("%d %d %d %d %d %d\n",nr[i],nr[j],nr[l],v[mij].x,v[mij].y,v[mij].z);
       return 0;}
       else
       if(v[mij].sum()>d)
                q=mij-1;
      else
                p=mij+1;
                
        }
     }
    }
printf("-1\n");
return 0;}