Cod sursa(job #1081748)

Utilizator teodor98Teodor Sz teodor98 Data 13 ianuarie 2014 21:16:57
Problema Loto Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");

int *v,s,n,nr, *sum;
bool cautbin(int s)
{
    int i=0, pas = 1 << 17;
    while(pas!=0)
    {

        if(i+pas <=nr && sum[i+pas]<=s)
        {
            i+=pas;
        }
        pas/=2;
    }
    if(sum[i] == s)
        return 1;
    return 0;

}
int main()
{
    in >> n >> s;
    v = (int *) malloc(sizeof(int)*(n+1));
    sum = (int *) malloc(sizeof(int)*(n+1)*(n+1)*(n+1));

    for(int i=1;i<=n;i++)
        in >> v[i];
    in.close();


    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++)
            for(int k=j;k<=n;k++)
                    {
                        sum[++nr] = v[i]+v[j]+v[k];
                    }
    sort(sum+1,sum+nr+1);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
            {
                if(cautbin(s-v[i]-v[j]-v[k]))
                {

                    out << v[i] << " " << v[j] <<" " << v[k] << " ";
                    for(int q=1;q<=n;q++)
                        for(int r=1;r<=n;r++)
                            for(int o=1;o<=n;o++)
                            if(v[q]+v[r]+v[o] == s-v[i]-v[j]-v[k])
                            {
                                out << v[q] << " "<< v[r] <<" "<< v[o];
                                          out.close();
                                          return 0;
                            }

                }
            }

    out << -1;
    out.close();
    return 0;
}