Pagini recente » Cod sursa (job #588085) | Cod sursa (job #1846043) | Cod sursa (job #1552802) | Cod sursa (job #1423129) | Cod sursa (job #851753)
Cod sursa(job #851753)
#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,sume+f);
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;
}