Cod sursa(job #884060)

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

using namespace std;
int v[103],sume[1000001];
struct numere
{
    int x,y,z;
};
numere r[1000001];

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;
}
int main()
{
    FILE *in = fopen("loto.in","r");
    FILE *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 <= size ; i++)
    //{
      //  t=cautbin(sum-sume[i],size);
       // if(sume[i]+sume[t] == sum)
        //{
          //  fprintf(out,"%d %d %d %d %d %d\n",r[i].x,r[i].y,r[i].z,r[t].x,r[t].y,r[t].z);
           // return 0;
        //}
    //}
    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){
                        for(i1=1 ; i1<=n ; i1++)
                            for(j1=i1 ; j1<= n ; j1++)
                                for(k1=j1 ; k1<=n ; k1++)
                                    if((v[i1]+v[j1]+v[k1]+v[i]+v[j]+v[k]) == sum){
                                        fprintf(out,"%d %d %d %d %d %d\n",v[i1],v[j1],v[k1],v[i],v[j],v[k]);
                                        return 0;
                                    }
                }
            }
    fprintf(out,"-1\n");
    return 0;
}