Cod sursa(job #591045)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 21 mai 2011 22:54:07
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<stdio.h>
int n,i,j,k,s1,s2,s3,i1,i2,i3,m;
long s,v[101],y[101],t,x[7];

void merge(long v[101],int p,int q)
{int m=(p+q)/2,i,j,k;
if(p==q)
      return;
merge(v,p,m);
merge(v,m+1,q);
for(i=p,j=m+1,k=p;i<=m||j<=q;)
if(j>q||(i<=m&&v[i]<v[j]))
      y[k++]=v[i++];
else
      y[k++]=v[j++];
for(i=p;i<=q;i++)
      v[i]=y[i];}

int main()
{freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d%ld\n",&n,&s);
for(i=1;i<=n;i++)
     scanf("%ld",&v[i]);
t=s;
for(m=1;m<=n;m<<=1);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
     {i1=i2=i3=0;
     s=t-v[i]-v[j]-v[k];
     for(s1=m;s1;s1>>=1)
     for(s2=m;s2;s2>>=1)
     for(s3=m;s3;s3>>=1)
     if(i1+s1<=n&&i2+s2<=n&&i3+s3<=n)
          if(v[i1+s1]+v[i2+s2]+v[i3+s3]<s)
                {i1+=s1;
                i2+=s2;
                i3+=s3;}
          else
                if(v[i1+s1]+v[i2+s2]+v[i3+s3]==s)
                        {x[1]=v[i];
                        x[2]=v[j];
                        x[3]=v[k];
                        x[4]=v[i1+s1];
                        x[5]=v[i2+s2];
                        x[6]=v[i3+s3];
                        merge(x,1,6);
                        printf("%ld %ld %ld %ld %ld %ld\n",x[1],x[2],x[3],x[4],x[5],x[6]);
                        return 0;}}
printf("-1\n");
fclose(stdin);
fclose(stdout);
return 0;}