Cod sursa(job #1536533)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 26 noiembrie 2015 12:48:00
Problema Loto Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.79 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<=n;i++){
        for (j=i;j<=n;j++){
            for (t=j;t<=n;t++){
                x = v[i]+v[j]+v[t];
                x = s2-x;
                p = 1;
                u = k;
                while (p<=u){
                    m = (p+u)/2;
                    if (s[m].first.first == x)
                        break;
                    else{
                        if (s[m].first.first < x)
                            p = m+1;
                        else
                            u = m-1;
                    }
                }
                if (p<=u){
                    fprintf (fout,"%d %d %d " , v[i] , v[j] , v[t] );

                    fprintf (fout,"%d %d %d ",s[m].first.second , s[m].second.first,s[m].second.second);

                    ok = 1;
                    break;
                }

            }
            if (ok == 1)
                break;

        }
        if (ok == 1)
            break;
    }




  /*  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;
}