Cod sursa(job #884061)

Utilizator PavelPavel Ana-Oriana Pavel Data 20 februarie 2013 17:11:19
Problema Loto Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
#include <algorithm>

using namespace std;
int v[103],sume[1000001];
struct numere
{
    int x,y,z;
};
numere r[1000001];
FILE *in,*out;
bool cautbin(int suma,int n)
{
    int i,pas=1<<20;
    for(i=0 ; pas != 0 ; pas/=2)
        if((i+pas) <= n && sume[i+pas] <= suma)
            i+=pas;
    if(sume[i] == suma)
        return true;
    return false;
}
bool afisare(int a, int b, int c,int n,int sum)
{
    int i,j,k;
    for(i=1 ; i<=n ; i++)
        for(j=i ; j<= n ; j++)
            for(k=j ; k<=n ; k++)
                if((v[i]+v[j]+v[k]+v[a]+v[b]+v[c]) == sum){
                    fprintf(out,"%d %d %d %d %d %d\n",v[a],v[b],v[c],v[i],v[j],v[k]);
                    return 0;
                }
    return 0;
}
int main()
{
    in = fopen("loto.in","r");
    out = fopen("loto.out","w");
    int n,sum,size=0,i,j,k,t,i1,j1,k1;
    fscanf(in,"%d%d",&n,&sum);
    for(i=1 ; i<=n ; i++)
        fscanf(in,"%d",&v[i]);
    for(i=1 ; i<=n ; i++)
        for(j=i ; j<= n ; j++)
            for(k=j ; k<=n ; k++)
                sume[++size]=v[i]+v[j]+v[k];
    sort(sume + 1 , sume + size + 1 );
    for(i=1 ; i<=n ; i++)
        for(j=i ; j<= n ; j++)
            for(k=j ; k<=n ; k++){
                if(cautbin(sum-(v[i]+v[j]+v[k]),size) == true){
                    afisare(i,j,k,n,sum);
                    return 0;
                }
            }
    fprintf(out,"-1\n");
    return 0;
}