Pagini recente » Cod sursa (job #2958847) | Cod sursa (job #2664990) | Monitorul de evaluare | Cod sursa (job #716960) | Cod sursa (job #769444)
Cod sursa(job #769444)
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000001
using namespace std;
typedef struct _sume{
int a,b,c,suma;
} sume;
int N, S, vec[105];
sume s[MAX];
int CautBin( int x, int left, int right, sume s[] ){
int mid;
while ( left <= right ) {
mid = ( left + right ) / 2;
if ( s[mid].suma == x )
return mid;
else if ( x < s[mid].suma )
right = mid - 1;
else left = mid + 1;
}
return -1;
}
void solutie( int n, FILE* pf){
int sol;
for( int i = 0; i < N; i++ )
for( int j = i; j < N; j++ )
for( int k = j; k < N; k++ ){
if( ( sol = CautBin( S - ( vec[i] + vec[j] + vec[k] ), 0, n-1, s ) ) != - 1 ){
fprintf(pf,"%d %d %d %d %d %d\n", vec[i], vec[j], vec[k], s[sol].a, s[sol].b, s[sol].c);
return;
}
}
fprintf( pf,"-1\n");
}
bool comp( sume s1, sume s2 ){
if( s1.suma < s2.suma ) return true;
else return false;
}
int main () {
FILE *f1, *f2;
f1 = fopen("loto.in", "r" );
f2 = fopen("loto.out", "w" );
int t = 0;
fscanf(f1,"%d%d", &N, &S );
for( int i = 0 ; i < N ; i++ )
fscanf(f1,"%d", &vec[i]);
for( int i = 0 ; i < N; i++ )
for( int j = i; j < N; j++ )
for( int k = j; k < N; k++ ){
s[t].suma = vec[i] + vec[j] + vec[k];
s[t].a = vec[i];
s[t].b = vec[j];
s[t].c = vec[k];
t++;
}
printf("\n");
for( int i = 0 ; i < t; i++ )
printf("%d ", s[i].suma );
sort( s, s + t, comp);
printf("\n");
for( int i = 0 ; i < t; i++ )
printf("%d ", s[i].suma );
solutie( t - 1, f2 );
fclose(f1);
fclose(f2);
return 0;
}