Cod sursa(job #1197021)

Utilizator Vladinho97Iordan Vlad Vladinho97 Data 10 iunie 2014 12:44:47
Problema Loto Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include<cstdio>
#include<stdlib.h>
#include<algorithm>
#define MOD 666013
#define nmax 109
#define MAX 666200
using namespace std;
struct rasp
{
    int va;
    int n1;
    int n2;
    int n3;
};
int v[nmax],nr=0;
rasp val[nmax*nmax*nmax];
bool cmp(rasp a,rasp b)
{
    if(a.va<b.va)
        return true;
    return false;
}
bool cauta(int x)
{
    int inc=1,sf=nr,med;
    while(inc<=sf)
    {
        med=(inc+sf)/2;
        if(val[med].va==x)
        {
            printf("%d %d %d ",v[val[med].n1],v[val[med].n2],v[val[med].n3]);
            return true;
        }
        if(val[med].va<x)
        {
            inc=med+1;
        }
        else
        {
            sf=med-1;
        }

    }
    return false;
}
int main()
{
    freopen("loto.in","r",stdin);
    freopen("loto.out","w",stdout);
    int i,j,k,n,s;
    scanf("%d%d",&n,&s);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            for(k=1;k<=n;k++)
            {
                nr++;
                val[nr].va=v[i]+v[j]+v[k];
                val[nr].n1=i; val[nr].n2=j; val[nr].n3=k;
            }
    sort(val+1,val+nr+1,cmp);
    i=1;
    while(val[i].va<=s/2)
    {
        if(cauta(s-val[i].va)==true)
        {
            printf("%d %d %d\n",v[val[i].n1],v[val[i].n2],v[val[i].n3]);
            return 0;
        }
        i++;
    }
    printf("-1\n");
}