Pagini recente » Cod sursa (job #711693) | Cod sursa (job #532735) | Cod sursa (job #2548024) | Cod sursa (job #1508779) | Cod sursa (job #568539)
Cod sursa(job #568539)
#include<fstream>
#include<map>
#include<vector>
#define dmax 110
using namespace std;
typedef struct termen
{
int s,e1,e2,e3;
} termen;
vector <termen> t;
map<int, bool> viz;
int n,s;
int a[dmax];
int sumc,poz,nr;
void citire()
{
int i;
ifstream fin("loto.in");
fin>>n>>s;
for (i=1; i<=n; i++)
fin>>a[i];
fin.close();
}
bool comp(termen a, termen b)
{
return a.s < b.s;
}
void cauta(int st, int dr)
{
int mijl = (st + dr) / 2;
if (st <= dr)
if (t[mijl].s == sumc)
poz = mijl; else
if (t[mijl].s > sumc)
cauta(st, mijl-1); else
cauta(mijl+1, dr);
}
void solve()
{
int i,j,k;
int gasit = 0,sum;
termen aux;
ofstream fout("loto.out");
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
for (k=1; k<=n; k++)
{
sum = a[i] + a[j] + a[k];
if (viz[sum] == 0) /*daca nu am obtinut pana acum suma sum*/
{
aux.s = sum; aux.e1 = a[i]; aux.e2 = a[j]; aux.e3 = a[k];
t.push_back(aux);
viz[sum] = 1;
}
if (viz[s - sum] == 1) /*daca am suma opusa cat sa ajung la suma s*/
{
sort(t.begin(), t.end(), comp);
sumc = s - sum;
cauta(0, t.size()-1);
fout<<a[i]<<" "<<a[j]<<" "<<a[k]<<" "<<t[poz].e1<<" "<<t[poz].e2<<" "<<t[poz].e3<<'\n';
fout.close();
return;
}
}
if (gasit == 0)
fout<<"-1"<<'\n';
fout.close();
}
int main()
{
citire();
solve();
return 0;
}