Pagini recente » Cod sursa (job #892260) | Cod sursa (job #83443) | Cod sursa (job #499805) | Cod sursa (job #1202245) | Cod sursa (job #2557442)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("loto.in");
ofstream g("loto.out");
struct loto
{
int i1,i2,i3,sum;
} A[1000005];
int v[105],N,S,Nr,iS,Sol[10];
bool comp(loto x,loto y)
{
return(x.sum<y.sum);
}
int BinSearch(int low,int x,int high)
{
while(low<=high)
{
int mid=low+(high-low)/2;
if(A[mid].sum==x)
return mid;
if(A[mid].sum<x)
low=mid+1;
else
high=mid-1;
}
return low;
}
int main()
{
f>>N>>S;
for(int i=1; i<=N; i++)
f>>v[i];
for(int i1=1; i1<=N; i1++)
for(int i2=i1; i2<=N; i2++)
for(int i3=i2; i3<=N; i3++)
{
int s=v[i1]+v[i2]+v[i3];
if(s<=S)
{
Nr++;
A[Nr].sum=s;
A[Nr].i1=i1;
A[Nr].i2=i2;
A[Nr].i3=i3;
}
}
sort(A+1,A+Nr+1,comp);
int i=1;
bool ok=0;
while(i<=Nr && !ok)
{
iS=BinSearch(i,S-A[i].sum,Nr);
if(A[iS].sum+A[i].sum==S)
ok=1;
else
i++;
}
if(!ok)
g<<-1;
else
{
Sol[1]=A[i].i1;
Sol[2]=A[i].i2;
Sol[3]=A[i].i3;
Sol[4]=A[iS].i1;
Sol[5]=A[iS].i2;
Sol[6]=A[iS].i3;
sort(Sol+1,Sol+7);
for(int i=1; i<=6; i++)
g<<Sol[i]<<" ";
}
return 0;
}