Cod sursa(job #133295)

Utilizator katakunaCazacu Alexandru katakuna Data 8 februarie 2008 08:43:40
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
int ok,val,mij,u,k2,s1,i,j,l,n,sx,v[104],k,c,p;

struct suma
{
 int a,b,c,s2 ;

} s[1000101],aux;



int main(){
FILE *f=fopen("loto.in","r");
FILE *g=fopen("loto.out","w");
fscanf(f,"%d %d",&n,&sx);
  for(i=1;i<=n;i++){
  fscanf(f,"%d",&v[i]);
  }

fclose(f);


    for(i=1;i<=n;i++){

      for(j=1;j<=n;j++){
      s1=v[i]+v[j];
	for(l=1;l<=n;l++){
	k++;
	s[k].s2=v[l]+s1;
	s[k].a=v[i];
	s[k].b=v[j];
	s[k].c=v[l];

	}
      }

    }





k2=k;


  for(i=2;i<=k;i++){
  c=i;
  p=c>>1;

     while((p)&&(s[c].s2>s[p].s2)){
     aux=s[c];
     s[c]=s[p];
     s[p]=aux;

     c=p;
     p=c>>1;

     }

  }


  for(i=k;i>1;i--){
  aux=s[i];
  s[i]=s[1];
  s[1]=aux;
  p=1;
  c=p<<1;

    k--;

      while(c<=k){
       if((s[c].s2<s[c+1].s2)&&c<k){c++;}

       if(s[p].s2<s[c].s2){
       aux=s[p];
       s[p]=s[c];
       s[c]=aux;
       p=c;
       c=p<<1;
       }


       else{break;}

      }


  }

ok=1;

  for(i=1;i<=k2;i++){

    if(s[i].s2!=s[i-1].s2){

      val=sx-s[i].s2;

      p=1;
      u=k2;

       while(p<=u){
       mij=(p+u)/2;

	  if(s[mij].s2>=val)
	  u=mij-1;

	  else
	  p=mij+1;


       }


     if(s[p].s2==val){
     ok=0;
     break;
     }


    }


  }



if(ok)fprintf(g,"%d",-1);

else{

 fprintf(g,"%d %d %d %d %d %d",s[i].a,s[i].b,s[i].c,s[p].a,s[p].b,s[p].c);


}




fclose(g);

return 0;
}