Cod sursa(job #307819)

Utilizator xtremespeedzeal xtreme Data 25 aprilie 2009 00:54:19
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <iostream.h>
#include <algorithm>
#include <vector>
#include <stdio.h>
using namespace std;

struct tip
       {long int a,b,c,s;} nr; 
vector<tip> numbers;
vector<tip>::iterator it;
int n,i,j,k;
long int S,jumk;

bool cmp(tip o,tip p)
     {return o.s<p.s;}
int main()
    {long int lotnum[101],inc,sf,mij;
    freopen("loto.in","r",stdin);freopen("loto.out","w",stdout);
    scanf("%d %d",&n,&S);
    for(i=1;i<=n;i++)
             scanf("%ld",&lotnum[i]);
    for(i=1;i<=n;i++)
           for(j=i;j<=n;j++)
                 for(k=j;k<=n;k++)
                     {nr.a=lotnum[i];nr.b=lotnum[j];nr.c=lotnum[k];
                     nr.s=lotnum[i]+lotnum[j]+lotnum[k];
                     numbers.push_back(nr);}
    sort(numbers.begin(),numbers.end(),cmp);
    j=numbers.size()-1;
    for(i=0;i<=j;i++)
             {jumk=S-numbers[i].s;
              inc=i;sf=j;mij=(i+j)/2;
              while(inc<=sf)
                       {if(jumk<numbers[mij].s)        {sf=mij-1;mij=(sf+inc)/2;}
                        else if(jumk>numbers[mij].s)    {inc=mij+1;mij=(sf+inc)/2;}
                        else  {printf("%ld %ld %ld %ld %ld %ld\n",numbers[i].a,numbers[i].b,numbers[i].c,numbers[mij].a,numbers[mij].b,numbers[mij].c);
                              fclose(stdout);fclose(stdin);return 0;}
                       }
             }
    printf("-1\n");fclose(stdin);fclose(stdout);
    return 0;}