Pagini recente » Cod sursa (job #2237251) | Cod sursa (job #697003) | Cod sursa (job #1507977) | Cod sursa (job #784748) | Cod sursa (job #785314)
Cod sursa(job #785314)
#include <cstdio>
#include <algorithm>
using namespace std;
const int Omax = 210;
const int Steps = 210;
const int O = 200;
int D[Steps][Omax];
int Init[Omax];
int Last[Omax],Nbr;
int N,G,Sum;
void Solve(int Act)
{
int i=Act;
for (int j=O;j;--j)
if ( i-j >= 0 )
if ( D[(i-j)%Steps][j] )
{
for (int k=0;k<=O;++k)
D[i%Steps][k]=D[(i-j)%Steps][k];
--D[i%Steps][j],--D[i%Steps][0];
if ( Act<=G )
{
for (int k=0;k<=O;++k)
Last[k]=D[i%Steps][k];
Nbr=Act;
}
return;
}
}
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d\n",&N,&G);
for (int i=1,X;i<=N;++i)
{
scanf("%d\n",&X);
++D[0][X];
++D[0][0];
++Init[X];
++Init[0];
Sum+=X;
}
++D[0][0];
for (int i=1;i<=min(Sum,G);++i)
Solve(i);
int Sol,Co;
Sol=Nbr;
Co=Init[0]-Last[0]+1;
printf("%d %d\n",Sol,Co);
for (int j=1;j<=O;++j)
for ( ; Init[j]-Last[j] ; ++Last[j] )
printf("%d\n",j);
fclose(stdin);
fclose(stdout);
}