Pagini recente » Cod sursa (job #1033142) | Cod sursa (job #2455703) | Cod sursa (job #824232) | Cod sursa (job #2731341) | Cod sursa (job #760133)
Cod sursa(job #760133)
#include <fstream>
#include <algorithm>
#define l 105
using namespace std;
ifstream f ( "loto.in" );
ofstream g ( "loto.out" );
int ok1,ok2,sum[l*l*l*3],v[l],N,i,j,t,n,S,V1,V2,st;
int caut ( int val )
{
int step=st,p=0;
for ( ; step; step/=2 )
if ( p+step<=N&&sum[p+step]<=val ) p+=step;
if ( sum[p]==val&&p!=0 ) return val;
else return -1;
}
int main()
{
f>>n>>S;
for ( i=1; i<=n; i++ ) f>>v[i];
for ( i=1; i<=n; i++ )
for ( j=1; j<=n; j++ )
for ( t=1; t<=n; t++ ) {
N++;
sum[N]=v[t]+v[j]+v[i];
}
sort(sum+1,sum+N+1);
for ( st=1; st<N; st*=2 );
for ( i=1; i<=N; i++ )
if ( caut ( S-sum[i] )!=-1) {
V1=sum[i];
V2=caut ( S-sum[i] );
break;
}
if (V1+V2!=S) g<<-1; else
for ( i=1; i<=n; i++ )
for ( j=1; j<=n; j++ )
for ( t=1; t<=n; t++ )
{
if ( ok1==0&&v[i]+v[j]+v[t]==V1 ) {
g<<v[i]<<" "<<v[j]<<" "<<v[t]<<" ";
ok1=1;
}
if ( ok2==0&&v[i]+v[j]+v[t]==V2 ) {
g<<v[i]<<" "<<v[j]<<" "<<v[t]<<" ";
ok2=1;
}
}
f.close();
g.close();
return 0;
}