Pagini recente » Cod sursa (job #2695180) | Cod sursa (job #1485125) | Cod sursa (job #2545465) | Cod sursa (job #478357) | Cod sursa (job #175156)
Cod sursa(job #175156)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define INPUT "loto.in"
#define OUTPUT "loto.out"
#define NMAX 105
#define DMAX 1000005
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
int N;
long S, cont;
vector<long> nr( NMAX ), value( DMAX );//, val[ DMAX ];
long left = 0, right;
int OK = 1, i, j, k;
long Cont, tmp;
void readValues()
{
fscanf(fin, "%d %ld", &N, &S);
for(i = 0; i < N; ++i)
fscanf(fin, "%ld", &nr[ i ]);
}
void printSolution(long sum)
{
if(sum != -1)
{
/* Cont = 0;
while(valor >= N * N)
{
valor -= N * N;
++Cont;
}
fprintf(fout, "%ld ", nr[ Cont ]);
Cont = 0;
while(valor >= N)
{
valor -= N;
++Cont;
}
fprintf(fout, "%ld ", nr[ Cont ]);
fprintf(fout, "%ld ", nr[ valor ]);
*/
OK = 1;
for( i = 0; i < N && OK; ++i)
for( j = 0; j < N && OK; ++j)
for( k = 0; k < N && OK; ++k)
if(nr[ i ] + nr[ j ] + nr[ k ] == sum)
{
fprintf(fout, "%ld %ld %ld ", nr[ i ], nr[ j ], nr[ k ]);
OK = 0;
}
}
else
fprintf(fout, "-1");
}
void binSearch()
{
right = cont;
while( left <= right && OK)
{
while(value[ left ] + value[ right ] > S )
--right;
while(value[ left ] + value[ right ] < S )
++left;
if(value[ left ] + value[ right ] == S)
{
printSolution(value[ left ]);
printSolution(value[ right ]);
break;
}
}
if(left > right)
printSolution(-1);
fprintf(fout, "\n");
}
/*
void quickSort(long st, long dr)
{
long l = st, m = dr;
while( l != m)
{
if( ( l < m && value[ l ] > value[ m ]) || ( l > m && value[ l ] < value[ m ]))
{
tmp = value[ l ];
value[ l ] = value[ m ];
value[ m ] = tmp;
tmp = val[ l ];
val[ l ] = val[ m ];
val[ m ] = tmp;
tmp = l;
l = m;
m = tmp;
if(l < m)
--m;
else
++m;
}
else
if( l < m )
--m;
else
++m;
}
if(l != st) quickSort(st, l-1);
if(l != dr) quickSort( l+1, dr);
}*/
int main()
{
readValues();
cont = 0;
for(i = 0; i < N; ++i)
for(j = 0; j < N; ++j)
for(k = 0; k < N; ++k)
{
value[ cont ] = nr[ i ] + nr[ j ] + nr[ k ];
// val[ cont ] = cont;
++cont;
}
// quickSort(0, cont);
value.resize(cont+1);
sort(value.begin(), value.end());
binSearch();
fclose(fin);
fclose(fout);
return 0;
}