Cod sursa(job #455262)

Utilizator elfusFlorin Chirica elfus Data 13 mai 2010 12:51:30
Problema Loto Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
//daca citesti sursa si vrei s-o copiezi sa-ti fie rusine!!!
//o sa anunt politia infoarena la 112
#include<stdio.h>
#include<stdlib.h>
#define ELFMAX 101*101*101
long v[101];
struct ELF
{
long sum,x,y,z;
};
ELF elfus[ELFMAX];
int comp(const void *a,const void *b)
{
ELF *pa,*pb;
pa=(ELF*)a;
pb=(ELF*)b;
if(pa->sum > pb->sum)
  return 1;
if(pa->sum < pb->sum)
  return -1;
return 0;
}
int gasit(long val,int dr)
{
if(val<0)
  return 0;
int st=1,med;
while(st<=dr)
  {
  med=(st+dr)>>1;
  if(val==elfus[med].sum)
     return med;
  if(val<elfus[med].sum)
     dr=med-1;
  else
     st=med+1;
  }
return 0;
}
void afiseazabree(int i,int j)
{
printf("%ld %ld% ld% ld %ld %ld",elfus[i].x,elfus[i].y,elfus[i].z,elfus[j].x,elfus[j].y,elfus[j].z);
}
int main()
{
int n,i,j,k;
long s,u,val;
freopen("loto.in","r",stdin);
freopen("loto.out","w",stdout);
scanf("%d%ld",&n,&s);
for(i=1;i<=n;i++)
  scanf("%ld",&v[i]);
for(i=1;i<=n;i++)
  for(j=i;j<=n;j++)
    for(k=j;k<=n;k++)
      {elfus[++u].sum=v[i]+v[j]+v[k]; elfus[u].x=v[i]; elfus[u].y=v[j]; elfus[u].z=v[k]; }
qsort(elfus+1,u,sizeof(elfus[0]),comp);
for(i=1;i<=u;i++)
  {
  val=gasit(s-elfus[i].sum,u);
  if(val)
    {afiseazabree(i,val); return 0;}
  }
printf("-1");
return 0;
}

//baaaah,care asculta parazitii de pe aici?
//o daaaaa,am 69 de linii!!!