Pagini recente » Cod sursa (job #2061425) | Cod sursa (job #2514863) | Cod sursa (job #856200) | Cod sursa (job #1807245) | Cod sursa (job #1073073)
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
struct sum {
int SumT; // suma pe care o am
int x, y, z; // numerele care alcatuiesc suma
} v[1000001];
int a[101];
bool cmp(const sum &a1, const sum &b1)
{
return(a1.SumT < b1.SumT);
}
int main()
{
int S, i, j, k, n, p, dr, mid, st, s1, s;
bool ok;
ifstream f("loto.in");
ofstream g("loto.out");
f >> n >> S ;
p = 0;
for ( i=1; i<=n; i++ )
f >> a[i];
for ( i=1; i<=n; i++)
for ( j=i; j<=n; j++ )
for ( k=j; k<=n; k++ )
{
++p;
s = a[i] + a[j] + a[k];
v[p].SumT = s;
v[p].x = a[i];
v[p].y = a[j];
v[p].z = a[k];
} // se calculeaza sumele existente
sort(v+1, v+p+1, cmp);
ok = 1;
s1 = 0;
for(i=1;i<=n && ok;i++)
for(j=i;j<=n && ok;j++)
for(k=j;k<=n && ok;k++)
{
s1 = S - a[i] - a[j] - a[k];
st=1;
dr=p;
while(st <= dr && ok)
{
mid = (st + dr) / 2;
if(v[mid].SumT > s1)
dr = mid-1;
else
if(v[mid].SumT < s1)
st = mid + 1;
else
ok=0; // daca gasim suma cautata, ok = 0
}
if(!ok)
{
g << a[i] <<" "<< a[j] <<" "<< a[k] <<" "<< v[mid].x <<" "<< v[mid].y <<" "<< v[mid].z <<"\n";
}
}
if (ok)
g << "-1";
return 0;
}