Pagini recente » Cod sursa (job #1249252) | Cod sursa (job #2884250) | Cod sursa (job #1908557) | Cod sursa (job #1099037) | Cod sursa (job #1712378)
#include <cstdio>
#define INF 1000000000
#define MAXG 75000
#define MAXA 200
FILE *fout;
int last[MAXG+1], fr[MAXA+1];
bool acum[MAXG+1];
void baga(int x, int s){
if(x==0) fprintf(fout, "%d\n", s);
else{
baga(x-last[x], s+1);
fprintf(fout, "%d\n", last[x]);
}
}
int main(){
int n, g, i, x, j, r, a, max;
FILE *fin;
fin=fopen("ghiozdan.in", "r");
fout=fopen("ghiozdan.out", "w");
fscanf(fin, "%d%d", &n, &g);
for(i=0; i<n; i++){
fscanf(fin, "%d", &x);
fr[x]++;
}
last[0]=-1;
for(i=MAXA; i>0; i--){
for(r=0; r<i; r++){
a=-INF;
for(j=r+i; j<=g; j+=i){
if(last[j-i]){
a=j-i;
}
if(j-a<=i*fr[i]){
acum[j]=1;
}else{
acum[j]=0;
}
}
}
for(j=1; j<=g; j++){
if((!last[j])&&(acum[j])) last[j]=i;
}
}
max=0;
for(i=1; i<=g; i++){
if(last[i]) max=i;
}
fprintf(fout, "%d ", max);
baga(max, 0);
fclose(fin);
fclose(fout);
return 0;
}