Cod sursa(job #1536279)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 25 noiembrie 2015 21:58:00
Problema Loto Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>

#include <cstdio>

#include <algorithm>

using namespace std;

int n,i,v[101],j,k,p,s2,u,m,t,ok;

long long x,y2,y;

pair < pair<long long ,int> , pair <int,int> > s[200005];

FILE  *fin = fopen("loto.in","r");

FILE  *fout = fopen("loto.out","w");

//ifstream fin ("loto.in");

//ofstream fout ("loto.out");

int main (){

    fscanf (fin,"%d%d",&n,&s2);
    for (i=1;i<=n;i++)
        fscanf (fin,"%d",&v[i]);
    k = 0;
    for (i=1;i<=n;i++)
        for (j=i;j<=n;j++)
            for (t=j;t<=n;t++){
                k++;
                s[k].first.first = v[i]+v[j]+v[t];
                s[k].first.second = v[i];
                s[k].second.first = v[j];
                s[k].second.second  = v[t];
            }
    sort (v+1,v+n+1);
    ok = 0;
    for (i=1;i<=k;i++){
        x = s2-s[i].first.first;
        for (j=1;j<=n;j++){
            y2 = x-v[j];
            for (t=j;t<=n;t++){
                y = y2-v[t];
                p = 1;
                u = n;
                while (p<=u){
                    m = (p+u)/2;
                    if (v[m] == y)
                        break;
                    else{
                        if (v[m] < y)
                            p = m+1;
                        else
                            u = m-1;
                    }
                }
                if (p<=u){
                    fprintf (fout,"%d %d ",s[i].first.second , s[i].second.first);
                    fprintf (fout,"%d %d %d %d",s[i].second.second , v[j] , v[t] , v[m] );
                    ok = 1;
                    break;
                }
            }
            if (ok == 1)
                break;
        }
        if (ok == 1)
            break;
    }
    if (ok == 0)
        fprintf (fout, "-1");

    return 0;
}