Cod sursa(job #283089)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 18 martie 2009 18:27:07
Problema Loto Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>
#include<algorithm>

#define MAXN 101
#define MAXTrip 1100000

using namespace std;

typedef struct comp;
struct comp
{
       int term1;
       int term2;
       int term3;
       int suma;
}
;

comp com[MAXTrip];

int v[MAXN],i,j,k,N,S,contor,ind,ok, sol;

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

int bin(int val)
{
    int left=1, right = contor, mij;
    while(left<=right)
    {
     mij=(left+right)/2;
     if( val == com[mij].suma) return mij;
      else if(val > com[mij].suma) left = mij+1;
       else if(val < com[mij].suma) right = mij-1;
     }  
  return 0;
}     


int main()
{
    FILE*in=fopen("loto.in","r");
    FILE*out=fopen("loto.out","w");
    fscanf(in,"%d %d",&N,&S);
    
    for( i = 1 ; i <= N ; i++)
     fscanf( in ,"%d", &v[i]);
     
   
   for( i = 1 ; i <= N ; i++)
    for( j = 1 ; j <= N; j++)
     for( k = 1 ; k <= N ; k++)
      {
          com[++contor].suma = v[i]+v[j]+v[k];
          com[contor].term1  = v[i];
          com[contor].term2  = v[j];
          com[contor].term3  = v[k];
      } 
   sort(com+1,com+contor+1, cmp);
  
for ( i = 1 ; i <= contor ; i++)
{
     if(S-com[i].suma>0)
     {
        sol = bin(S-com[i].suma);
        if(sol)
        {
               fprintf(out,"%d %d %d %d %d %d ",com[i].term1,com[i].term2,com[i].term3,com[sol].term1,com[sol].term2,com[sol].term3);
               ok = 1;
               break;
        }
     }
}
if(ok != 1) fprintf(out,"-1",-1);  
  
return 0;
}