Pagini recente » Cod sursa (job #2872805) | Cod sursa (job #2409054) | Cod sursa (job #3287409) | Cod sursa (job #918769) | Cod sursa (job #855865)
Cod sursa(job #855865)
#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();}