Cod sursa(job #304700)

Utilizator cosserBula Ionut cosser Data 15 aprilie 2009 02:00:26
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include<iostream>
#include<fstream>

using namespace std;

#define ATR 100000000

struct sir
       {
            long x,y,z,sum;
       };

int nulomuto(sir a[ATR],int s, int d)
{
  long i,j; sir t66;
  long piv=a[s].sum;
  i=s-1;
  j=d+1;

  while(i<j)
        {
            do
             j--;
                while(a[j].sum>piv);
            do
             i++;
                while(a[i].sum<piv);
        if(i<j)
            {
               t66=a[i];
               a[i]=a[j];
               a[j]=t66;
            }
          else
            return j;
        }
}



void quix(sir a[ATR],int s, int d)
{
    int m;
    if (s<d)
        {
            m=nulomuto(a,s,d);
            quix(a,s,m);
            quix(a,m+1,d);
        }
}


ifstream f ("loto.in");
ofstream o ("loto.out");



sir b[ATR];

int main()
{long n,i,j,k,S,w[101],p=1,kk=0,l;


f>>n>>S;

for(i=1;i<=n;i++)
                f>>w[i];

for(i=1;i<=n;i++)
   for(j=i;j<=n;j++)
       for(k=j;k<=n;k++)
          {
              b[++kk].sum=w[i]+w[j]+w[k];
              b[kk].x=w[i];
              b[kk].y=w[j];
              b[kk].z=w[k];
          }

quix(b,1,kk);

i=1;
j=kk;
while(i<=j && p==1)
    {
        l=S-b[i].sum;
        while(b[j].sum>l)
                        j--;
        if(b[j].sum == l)
             {

                 o<<b[i].x<<" "<<b[i].y<<" "<<b[i].z<<" "<<b[j].x<<" "<<b[j].y<<" "<<b[j].z;
                p=0;
             }
        i++;
    }

if(p)
    o<<"-1";





return 0;}