Pagini recente » Cod sursa (job #501825) | Cod sursa (job #1681113) | Cod sursa (job #1918448) | Cod sursa (job #2224948) | Cod sursa (job #812064)
Cod sursa(job #812064)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("loto.in");
ofstream out("loto.out");
int n,s,x[101],i,j,k,l,m,o;
vector<int> f[666014];
const int M = 666013;
inline void add_h(int v) {
f[v%M].push_back(v);
}
inline bool in_h(int v) {
if(v < 0)
return false;
for(vector<int>::iterator it=f[v%M].begin(), end=f[v%M].end(); it!=end; ++it) {
if(*it == v)
return true;
}
return false;
}
int main() {
in>>n>>s;
for(i=1; i<=n; i++) {
in>>x[i];
add_h(x[i]);
}
sort(x+1, x+n+1);
if(x[1] * 6 > s || x[n] * 6 < s ) {
out<<-1;
return 0;
}
for(i=1; i<=n && (x[i] * 6) <= s; i++)
for(j=i; j<=n && (x[i] + x[j] * 5 <= s) && (x[i] + x[n] * 5 >= s); j++)
for(k=j; k<=n && (x[i] + x[j] + x[k] * 4 <= s) && (x[i] + x[j] + x[n] * 4 >= s); k++)
for(l=k; l<=n && (x[i] + x[j] + x[k] + x[l] * 3 <= s) && (x[i] + x[j] + x[k] + x[n] * 3 >= s); l++)
for(m=l; m<=n && (x[i] + x[j] + x[k] + x[l] + x[m] * 2 <= s) && (x[i] + x[j] + x[k] + x[k] + x[n] * 2 >= s); m++)
if(in_h(s-x[i]-x[j]-x[k]-x[l]-x[m])) {
out<<x[i]<<' '<<x[j]<<' '<<x[k]<<' '<<x[l]<<' '<<x[m]<<' '<<(s-x[i]-x[j]-x[k]-x[l]-x[m]);
return 0;
}
out<<-1;
return 0;
}