Pagini recente » Cod sursa (job #188294) | Cod sursa (job #2089181) | Cod sursa (job #2734882) | Cod sursa (job #3125639) | Cod sursa (job #881467)
Cod sursa(job #881467)
#include <iostream>
#include <fstream>
#define DG 75555
#define DO 205
#define MULT (1<<30)
using namespace std;
int n,g,fr[DO],bst[2][DG],gmax,nmin;
int dq[DG],ind[DG],p=1,q=0;
int main()
{
ifstream f("ghiozdan.in");
ofstream out("ghiozdan.out");
f>>n>>g;
for(int i=0; i<n; ++i) {
int x;
f>>x;
++fr[x];
}
for(int j=0; j<=g; ++j) bst[0][j]=MULT;
bst[0][0]=0;
for(int i=1; i<DO; ++i) for(int gstart=0; gstart<i; ++gstart) {
int act=i&1; int pre=act^1;
p=1; q=0;
for(int j=gstart; j<=g; j+=i) {
bst[act][j]=MULT;
for(;p<=q && ind[p]<j-fr[i]*i; ++p);
for(;p<=q && dq[q]>=bst[pre][j]-j/i;--q);
dq[++q]=bst[pre][j]-j/i;
ind[q]=j;
bst[act][j]=bst[pre][ind[p]]+(j-ind[p])/i;
if(bst[act][j]!=MULT) {
if(gmax<j) gmax=j,nmin=bst[act][j];
else if(gmax==j) nmin=min(nmin,bst[act][j]);
}
}
}
out<<gmax<<' '<<nmin<<'\n';
return 0;
}