Cod sursa(job #147819)

Utilizator katakunaCazacu Alexandru katakuna Data 3 martie 2008 16:51:21
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include<stdio.h>

int a,b,d,e,h,ok,sol,u,mij,c,k,p,aux,t[1000000],S,n,i,j,su,s[1000000],v[101],l,nr;


int main(){

FILE *f=fopen("loto.in","r");
fscanf(f,"%d %d",&n,&S);

 for(i=1;i<=n;i++){
 fscanf(f,"%d",&v[i]);
 }

fclose(f);

FILE *g=fopen("loto.out","w");

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

    for(j=1;j<=n;j++){
    su=v[i]+v[j];

      for(l=1;l<=n;l++){
      nr++;
      s[nr]=su+v[l];
      t[nr]=nr;

      }

    }

  }


k=nr;

for(i=2;i<=k;i++){
  c=i;   
  p=c>>1;   
  
     while((p)&&(s[c]>s[p])){   
     aux=s[c];   
     s[c]=s[p];
     s[p]=aux;

     aux=t[c];
     t[c]=t[p];
     t[p]=aux;


     c=p;
     p=c>>1;

     }

  }


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

  aux=t[i];
  t[i]=t[1];
  t[1]=aux;

  p=1;
  c=p<<1;

    k--;

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

       if(s[p]<s[c]){
       aux=s[p];
       s[p]=s[c];
       s[c]=aux;

       aux=t[p];
       t[p]=t[c];
       t[c]=aux;

       p=c;
       c=p<<1;
       }
  
  
       else{break;}
  
      }
  
  
  }


ok=1;

  for(i=1;i<=nr&&ok;i++){
   if(s[i]!=s[i-1]){

   sol=S-s[i];

    p=1;
    u=nr;


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

	  if(s[mij]>=sol)
	  u=mij-1;

	  else
	  p=mij+1;

       }


    if(s[p]==sol){
    ok=0;

    nr=n;

    if(t[i]%(nr*nr)==0)
    a=t[i]/(nr*nr);

    else a=t[i]/(nr*nr)+1;



    a=v[a%nr];
    if(a==0)a=v[nr];

    if(t[i]%nr==0)
    b=t[i]/nr;

    else b=t[i]/nr+1;

    b=v[b%nr];
    if(b==0)b=v[nr];

    c=v[t[i]%nr];
    if(c==0)c=v[nr];

    if(t[p]%(nr*nr)==0)
    d=t[p]/(nr*nr);

    else d=t[p]/(nr*nr)+1;



    d=v[d%nr];
    if(d==0)d=v[nr];

    if(t[p]%nr==0)
    e=t[p]/nr;

    else e=t[p]/nr+1;

    e=v[e%nr];
    if(e==0)e=v[nr];

    h=v[t[p]%nr];
    if(h==0)h=v[nr];


     fprintf(g,"%d %d %d %d %d %d",a,b,c,d,e,h);


    }


   }
  }


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

fclose(g);


return 0;
}