Cod sursa(job #1033423)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 16 noiembrie 2013 22:03:36
Problema Loto Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<stdio.h>
#include<stdlib.h>
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
int v[100];
struct cord{
int val,x,y,z;
}s[1000000];
int cautbin(int st,int dr,int val)
{
    int mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(s[mij].val>val)
            dr=mij-1;
        if(s[mij].val<val)
            st=mij+1;
        if(s[mij].val==val)
        {
            return mij;
        }
    }
    return -1;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("loto.in","r");
    fout=fopen("loto.out","w");
    int n,S;
    fscanf(fin,"%d%d",&n,&S);
    int i;
    for(i=0;i<n;i++)
        fscanf(fin,"%d",&v[i]);
    int cont=0;
    int j,k;
    for(i=0;i<n;i++)
        for(j=i;j<n;j++)
            for(k=j;k<n;k++)
            {
                s[cont].val=v[i]+v[j]+v[k];
                s[cont].x=v[i];
                s[cont].y=v[j];
                s[cont].z=v[k];
                cont++;
            }
    qsort(s,cont,sizeof(s[0]),compare);
    for(i=0;i<cont;i++)
    {
        int x=S-s[i].val,val=cautbin(i,cont-1,x);
        if(val!=-1)
        {
            fprintf(fout,"%d %d %d ",s[i].x,s[i].y,s[i].z);
            fprintf(fout,"%d %d %d",s[val].x,s[val].y,s[val].z);
            return 0;
        }
    }
    fprintf(fout,"-1");
    return 0;
}