Cod sursa(job #855865)

Utilizator Vally77FMI Calinescu Valentin Gelu Vally77 Data 15 ianuarie 2013 18:46:36
Problema Loto Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
long long int s,numere[105],sume[1000005],f,k,inceput,sfarsit,sol,mijloc,n;
int bb,l,j;
bool gasit=false,doilea=false,treilea=false;
ifstream ka("loto.in");
ofstream ki("loto.out");
void cauta(long long int ceva)
{
    gasit=false;
    for(bb=1;bb<=n;bb++)
    {        for(l=1;l<=n;l++)
    {            for(j=1;j<=n;j++)
    {                if(numere[bb]+numere[l]+numere[j]==ceva)
    {ki<<numere[bb]<<" "<<numere[l]<<" "<<numere[j]<<" ";
    gasit=true;                break;}
    }            if(gasit==true)            break;
    }        if(gasit==true)        break;    }}void suma(){    f++;    sume[f]=numere[bb]+numere[l]+numere[j];} int main(){    ka>>n>>s;    f=0;    for(int i=1;i<=n;i++)    {        ka>>numere[i];    }    for(bb=1;bb<=n;bb++)    {        for(l=1;l<=n;l++)        {            for(j=1;j<=n;j++)            suma();        }    }    sort(sume+1,sume+f+1);    for(long long int i=1;i<=(f+1)/2;i++)    {        inceput=1;        sfarsit=f;        while(inceput<=sfarsit)        {            if(inceput==sfarsit-1)            {                if(sume[inceput]==s-sume[i])                sol=s-sume[i];                else if(sume[sfarsit]==s-sume[i])                sol=s-sume[i];                break;             }            else            {            mijloc=(inceput+sfarsit)/2;            if(sume[mijloc]>s-sume[i])            sfarsit=mijloc-1;            if(sume[mijloc]<s-sume[i])            inceput=mijloc+1;            if(sume[mijloc]==s-sume[i])            {sol=s-sume[i];            break;}            }        }    }    if(sol==0)    ki<<"-1";    else    {        cauta(sol);        cauta(s-sol);    }    return 0;ki.close();}