Cod sursa(job #194813)

Utilizator katakunaCazacu Alexandru katakuna Data 14 iunie 2008 14:04:21
Problema Loto Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

int m,S,v[105];

struct suma {int s,a,b,c;}s[1000001];

int n,i,j,l;


int cmp(suma a,suma b){
return a.s<b.s;
}


int main(){


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

int ok,N=0;
int w;

  for(i=1;i<=n;i++){
  fscanf(f,"%d",&w);
  ok=1;
  
    for(j=1;j<=N;j++){
      if(v[j]==w){
      ok=0;
      break;
      }
    }

   if(ok){
   N++;
   v[N]=w;
   }

  }

n=N;

fclose(f);

int y;

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

       if(y<=S){
       
         m++;
         s[m].s=y;
         s[m].a=v[i];
         s[m].b=v[j];
         s[m].c=v[l];

       }
       
     }
   }
 }
 

sort(s+1,s+m+1,cmp);

int sol,p,u,mij;

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


  for(i=1;i<=m;i++){
  sol=S-s[i].s;

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

    p=i;
    u=m;

      while(p<=u){
      mij=(p+u) >> 1;

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

        else
        p=mij+1;
      

      }


     if(s[p].s==sol){

      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);

     return 0;
     }


    }

  }


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


fclose(g);

return 0;
}