Pagini recente » Cod sursa (job #928724) | Cod sursa (job #2861554) | Cod sursa (job #2881013) | Cod sursa (job #2194170) | Cod sursa (job #379429)
Cod sursa(job #379429)
/*
* File: main.cpp
* Author: virtualdemon
*
* Created on January 1, 2010, 5:35 PM
*/
#include <vector>
#include <fstream>
#include <iterator>
#include <algorithm>
#define pb push_back
/*
*
*/
using namespace std;
struct vertex
{
int s, a, b, c;
}x;
inline ostream& operator<<( ostream& out, vertex z )
{
out<<z.a<<' '<<z.b<<' '<<z.c<<' ';
return out;
}
inline bool operator<( vertex A, vertex B )
{
return A.s < B.s;
}
vector< vertex > v;
int main()
{int number[110];
int n, S, sum, i, j, k, left, right, middle, key;
ifstream in("loto.in");
in>>n>>S;
for( i=0; i < n; ++i )
in>>number[i];
for( i=0; i < n; ++i )
for( j=0; j < n; ++j )
for( k=0; k < n; ++k )
{
x.s=number[i]+number[j]+number[k];
x.a=number[i]; x.b=number[j]; x.c=number[k];
if( S == 2*x.s )
{
ofstream out("loto.out");
out<<x<<' '<<x;
return 0;
}
if( x.s < S )
v.pb(x);
}
if( v.empty() )
{
ofstream out("loto.out");
out<<"-1";
return 0;
}
sort( v.begin(), v.end() );
n=v.size();
for( i=0; i < n ;++i )
{key=v[i].s;
left=0; right=n-1;
while( left < right )
{
middle=left+(right-left)/2;
sum=key+v[middle].s;
if( S == sum )
{
ofstream out("loto.out");
out<<v[i]<<' '<<v[middle];
return 0;
}
if( S > sum )
left=middle+1;
else right=middle-1;
}
}
ofstream out("loto.out");
out<<"-1";
return 0;
}