Cod sursa(job #785300)

Utilizator danalex97Dan H Alexandru danalex97 Data 8 septembrie 2012 13:31:05
Problema Ghiozdan Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
using namespace std;

const int Omax = 210;
const int Steps = 10000;
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);
}