Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 120 si 119 | Cod sursa (job #1486640) | Cod sursa (job #1269) | Cod sursa (job #2007978) | Cod sursa (job #1582564)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("loto.in");
ofstream fout("loto.out");
struct str{
int s;
int p1, p2, p3;
} v[100*100*100+1];
int n, s, slen, x[101];
void read()
{
fin>>n>>s;
for(int i=1;i<=n;i++)
fin>>x[i];
}
bool srt(str a, str b)
{
return a.s<b.s;
}
int findSum(int x)
{
int left = 1, right = slen;
while(left<=right)
{ int mid = (left + right) / 2;
if(v[mid].s == x) return mid;
else if(x>v[mid].s)
left = mid+1;
else
right = mid-1;
}
return -1;
}
void formStruct()
{
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
{
v[++slen].s=x[i]+x[j]+x[k];
v[slen].p1=x[i];
v[slen].p2=x[j];
v[slen].p3=x[k];
}
}
int main()
{
read();
formStruct();
sort(v+1, v+slen+1, srt);
bool sol=false;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
for(int k=j;k<=n;k++)
{
int sum = s-(x[i]+x[k]+x[j]);
int ok = findSum(sum);
if(ok != -1 && !sol)
{
fout<<x[i]<<" "<<x[j]<< " " << x[k]<<" "<<v[ok].p1<<" "<<v[ok].p2<<" "<<v[ok].p3;
sol=true;
}
}
if(!sol) fout<<-1;
return 0;
}