Pagini recente » Cod sursa (job #594143) | Cod sursa (job #873260) | Cod sursa (job #91226) | Cod sursa (job #373002) | Cod sursa (job #785301)
Cod sursa(job #785301)
#include <cstdio>
using namespace std;
const int Omax = 210;
const int Steps = 20000;
const int O = 200;
int D[Steps][Omax];
int Init[Omax];
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];
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<=G;++i) Solve(i);
int Sol,Co;for (Sol=G;D[Sol%Steps][0]==0;--Sol);
Co=Init[0]-D[Sol%Steps][0]+1;
printf("%d %d\n",Sol,Co);
for (int j=1;j<=O;++j)
for ( ; Init[j]-D[Sol%Steps][j] ; ++D[Sol%Steps][j] )
printf("%d\n",j);
fclose(stdin);
fclose(stdout);
}