Pagini recente » Cod sursa (job #1366948) | Cod sursa (job #1350720) | Cod sursa (job #1922929) | Cod sursa (job #3186009) | Cod sursa (job #1073064)
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
struct sum {
long SumT; // suma pe care o am
int x, y, z; // numerele care alcatuiesc suma
} v[1000001];
int a[101];
ifstream f("loto.in");
ofstream g("loto.out");
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;
p=0;
f >> n >> S ;
for ( i=1; i<=n; i++ )
f >> a[i];
for ( i=1; i<=n; i++)
for ( j=1; j<=n; j++ )
for ( k=1; 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;
}