Cod sursa(job #1275870)

Utilizator MihailPJack ONeill MihailP Data 25 noiembrie 2014 18:36:35
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
int S,N,vec[101];
FILE *f,*g;
struct suma
{
    int i,j,k,sum;
}v[1000001];

int compare(suma a,suma b)
{
    return (a.sum<b.sum);
}

int main()
{
    f=fopen("loto.in","r");
    g=fopen("loto.out","w");
    fscanf(f,"%d %d",&N,&S);
    int i,j,ind=1,suma,mijloc,a,b,k;
    for(i=1; i<=N; i++)
        fscanf(f,"%d",&vec[i]);
    for(i=1; i<=N; i++)
    {
        for(j=1; j<=N; j++)
        {
            for(k=1; k<=N; k++)
            {
                v[ind].i=vec[i];
                v[ind].j=vec[j];
                v[ind].k=vec[k];
                v[ind].sum=v[ind].i+v[ind].j+v[ind].k;
                ind++;
            }
        }
    }
    ind--;
    sort(v+1,v+ind+1,compare);
    for(i=1; i<=ind; i++)
    {
        suma=S-v[i].sum;
        a=1;
        b=ind;
        while(a<=b)
        {
            mijloc=(a+b)/2;
            if(v[mijloc].sum==suma)
            {
                fprintf(g,"%d %d %d %d %d %d",v[i].i,v[i].j,v[i].k,v[mijloc].i,v[mijloc].j,v[mijloc].k);
                return 0;
            }
            if(v[mijloc].sum>suma)
                b=mijloc-1;
            if(v[mijloc].sum<suma)
                a=mijloc+1;

        }
    }
        fprintf(g,"-1");



}