Cod sursa(job #1033392)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 16 noiembrie 2013 20:58:49
Problema Loto Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<stdio.h>
#include<stdlib.h>
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
int v[100],s[1000000],elem[1000000][3];
int cautbin(int st,int dr,int val)
{
    int mij;
    while(st<dr)
    {
        mij=(st+dr)/2;
        if(s[mij]>val)
            dr=mij;
        if(s[mij]<val)
            st=mij+1;
        if(s[mij]==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]=v[i]+v[j]+v[k];
                elem[cont][0]=v[i];
                elem[cont][1]=v[j];
                elem[cont][2]=v[k];
                cont++;
            }
    qsort(s,cont,sizeof(s[0]),compare);
    for(i=0;i<cont;i++)
    {
        int x=S-s[i],val=cautbin(i,cont-1,x);
        if(val!=-1)
        {
            fprintf(fout,"%d %d %d ",elem[i][0],elem[i][1],elem[i][2]);
            fprintf(fout,"%d %d %d",elem[val][0],elem[val][1],elem[val][2]);
            return 0;
        }
    }
    fprintf(fout,"-1");
    return 0;
}