Pagini recente » Cod sursa (job #280235) | Cod sursa (job #1676033) | Borderou de evaluare (job #1036157) | Cod sursa (job #97227) | Cod sursa (job #785295)
Cod sursa(job #785295)
#include <cstdio>
using namespace std;
const int Omax = 210;
const int O = 200;
int D[Omax][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)%(O+1)][j] )
{
for (int k=0;k<=O;++k)
D[i%(O+1)][k]=D[(i-j)%(O+1)][k];
--D[i%(O+1)][j],--D[i%(O+1)][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];
if ( Sum<G )
{
printf("%d %d\n",Sum,D[0][0]-1);
for (int j=1;j<=O;++j)
for ( ; D[0][j] ; --D[0][j] )
printf("%d\n",j);
}
for (int i=1;i<=G;++i) Solve(i);
int Sol,Co;for (Sol=G;D[Sol%(O+1)][0]==0;--Sol);
Co=Init[0]-D[Sol%(O+1)][0]+1;
printf("%d %d\n",Sol,Co);
for (int j=1;j<=O;++j)
for ( ; Init[j]-D[Sol%(O+1)][j] ; ++D[Sol%(O+1)][j] )
printf("%d\n",j);
fclose(stdin);
fclose(stdout);
}