Pagini recente » Cod sursa (job #695278) | Cod sursa (job #668623) | Cod sursa (job #1439254) | Cod sursa (job #1185911) | Cod sursa (job #2382211)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("loto.in");
ofstream out ("loto.out");
struct suma{int x1,x2,x3,s;} sume[100001];
bool verfmutare(suma a,suma b)
{return a.s<b.s;}
int main()
{
int n,s,cnt=1;
int v[100001];
int raspuns [7];
in>>n>>s;
for (int i=1;i<=n;++i)
in>>v[i];
for (int i=1;i<=n;++i)
for (int k=i;k<=n;++k)
for (int j=k;j<=n;++j)
{
sume[cnt].s=v[i]+v[j]+v[k];
sume[cnt].x1=v[i];
sume[cnt].x2=v[j];
sume[cnt++].x3=v[k];
}
sort(sume+1 , sume+cnt,verfmutare);
for (int i=1;i<=n;++i)
for (int k=i;k<=n;++k)
for (int j=k;j<=n;++j)
{
int s1=s-(v[i]+v[j]+v[k]);
int l=1,r=(n+1)*(n+2)/2,ok=0,x,ok1=0;
while (l<=r)
{
int mid=(l+r)/2;
if (sume[mid].s==s1)
{
x=sume[mid].s;
ok=mid;//loc unde am gasit suma
ok1=1;
}
if (v[mid]<s1)
l=mid+1;
else
r=mid-1;
}
if (ok1==1 || i==n)
{
int c1,c2,c3;
c1=sume[ok].x1;
c2=sume[ok].x2;
c3=sume[ok].x3;
int ver=c1+c2+c3+v[i]+v[j]+v[k];
if (ver==s)
{
raspuns[1]=v[i],raspuns[2]=v[j],raspuns[3]=v[k],raspuns[4]=c1,raspuns[5]=c2,raspuns[6]=c3;
sort (raspuns+1,raspuns+6+1);
for (int i=1;i<=6;++i)
out<<raspuns[i]<<' ';
return 0;
}
else
{
out<<-1;
return 0;
}
}
}
}